std::is_sorted (3) - Linux Manuals
std::is_sorted: std::is_sorted
NAME
std::is_sorted - std::is_sorted
Synopsis
Defined in header <algorithm>
template< class ForwardIt > (since C++11)
bool is_sorted( ForwardIt first, ForwardIt last ); (until C++20)
template< class ForwardIt > (since C++20)
constexpr bool is_sorted( ForwardIt first, ForwardIt last );
template< class ExecutionPolicy, class ForwardIt > (2) (since C++17)
bool is_sorted( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last ); (1)
template< class ForwardIt, class Compare > (since C++11)
bool is_sorted( ForwardIt first, ForwardIt last, Compare comp ); (until C++20)
template< class ForwardIt, class Compare > (3) (since C++20)
constexpr bool is_sorted( ForwardIt first, ForwardIt last, Compare comp );
template< class ExecutionPolicy, class ForwardIt, class Compare > (4) (since C++17)
bool is_sorted( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, Compare comp );
Checks if the elements in range [first, last) are sorted in non-descending order.
1) Elements are compared using operator<.
3) Elements are compared using the given binary comparison function comp.
2,4) Same as (1,3), but executed according to policy. These overloads do not participate in overload resolution unless std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> is true
Parameters
first, last - the range of elements to examine
policy - the execution policy to use. See execution_policy for details.
comp - While the signature does not need to have const &, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) Type1 and Type2 regardless of value_category (thus, Type1 & is not allowed
Type requirements
-
ForwardIt must meet the requirements of LegacyForwardIterator.
Return value
true if the elements in the range are sorted in ascending order
Complexity
linear in the distance between first and last
Exceptions
The overloads with a template parameter named ExecutionPolicy report errors as follows:
* If execution of a function invoked as part of the algorithm throws an exception and ExecutionPolicy is one of the standard_policies, std::terminate is called. For any other ExecutionPolicy, the behavior is implementation-defined.
* If the algorithm fails to allocate memory, std::bad_alloc is thrown.
Possible implementation
First version
Second version
Notes
std::is_sorted and std::is_sorted_until both return true for empty ranges and ranges of length one.
Example
// Run this code
Output:
See also
is_sorted_until finds the largest sorted subrange
(C++11)