std::is_sorted

Header: <algorithm>

Checks if the elements in range [first,last) are sorted in non-descending order.

# Declarations

template< class ForwardIt >
bool is_sorted( ForwardIt first, ForwardIt last );

(since C++11) (constexpr since C++20)

template< class ExecutionPolicy, class ForwardIt >
bool is_sorted( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last );

(since C++17)

template< class ForwardIt, class Compare >
bool is_sorted( ForwardIt first, ForwardIt last, Compare comp );

(since C++11) (constexpr since C++20)

template< class ExecutionPolicy, class ForwardIt, class Compare >
bool is_sorted( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, Compare comp );

(since C++17)

# Parameters

# Return value

true if the elements in the range are sorted in non-descending order, false otherwise.

# Notes

std::is_sorted returns true for empty ranges and ranges of length one.

# 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