std::is_sorted
| Defined in header <algorithm>
|
||
template< class ForwardIt >
bool is_sorted( ForwardIt first, ForwardIt last );
|
(1) | (since C++11) (constexpr since C++20) |
template< class ForwardIt, class Compare >
bool is_sorted( ForwardIt first, ForwardIt last, Compare comp );
|
(2) | (since C++11) (constexpr since C++20) |
template< class ExecutionPolicy, class ForwardIt >
bool is_sorted( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last );
|
(3) | (since C++17) |
template< class ExecutionPolicy, class ForwardIt, class Compare >
bool is_sorted( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, Compare comp );
|
(4) | (since C++17) |
Checks if all elements of the source range [first, last) are sorted.
operator<(until C++20)std::less{}(since C++20).comp.policy.true:
|
|
(until C++20) |
|
|
(since C++20) |
Parameters
| first, last | - | the pair of iterators defining the source range |
| comp | - | comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second. The signature of the comparison function should be equivalent to the following:
While the signature does not need to have |
| policy | - | the execution policy to use |
| Type requirements | ||
-ForwardIt must meet the requirements of LegacyForwardIterator.
| ||
-Compare must meet the requirements of Compare.
| ||
Return value
true if all elements of the source range are sorted, false otherwise.
Complexity
Given N as std::distance(first, last):
operator<(until C++20)std::less{}(since C++20).comp.Exceptions
- If the temporary memory resources required for parallelization are not available, std::bad_alloc is thrown.
- If an uncaught exception is thrown while accessing objects via an algorithm argument, the behavior is determined by the execution policy (for standard policies, std::terminate is invoked).
Notes
std::is_sorted returns true for empty ranges and ranges of length one.
Possible implementation
See also the implementations in libstdc++ and libc++.
| is_sorted (1) |
|---|
template<class ForwardIt>
bool is_sorted(ForwardIt first, ForwardIt last)
{
return std::is_sorted_until(first, last) == last;
}
|
| is_sorted (2) |
template<class ForwardIt, class Compare>
bool is_sorted(ForwardIt first, ForwardIt last, Compare comp)
{
return std::is_sorted_until(first, last, comp) == last;
}
|
Example
#include <algorithm>
#include <cassert>
#include <functional>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v;
assert(std::is_sorted(v.cbegin(), v.cend()) && "an empty range is always sorted");
v.push_back(42);
assert(std::is_sorted(v.cbegin(), v.cend()) && "a range of size 1 is always sorted");
int data[] = {3, 1, 4, 1, 5};
assert(not std::is_sorted(std::begin(data), std::end(data)));
std::sort(std::begin(data), std::end(data));
assert(std::is_sorted(std::begin(data), std::end(data)));
assert(not std::is_sorted(std::begin(data), std::end(data), std::greater<>{}));
}
See also
(C++20) |
checks whether a range is sorted (algorithm function object) |
(C++11) |
finds the largest sorted subrange (function template & algorithm function object) |
(C++20) |