std::is_sorted
Определено в заголовке <algorithm> | ||
|---|---|---|
| (1) | ||
template< class ForwardIt > bool is_sorted( ForwardIt first, ForwardIt last ); |
(с C++11) (до C++20) | |
template< class ForwardIt > constexpr bool is_sorted( ForwardIt first, ForwardIt last ); | (с C++20) | |
template< class ExecutionPolicy, class ForwardIt > bool is_sorted( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last ); | (2) | (с C++17) |
| (3) | ||
template< class ForwardIt, class Compare > bool is_sorted( ForwardIt first, ForwardIt last, Compare comp ); |
(с C++11) (до C++20) | |
template< class ForwardIt, class Compare > constexpr bool is_sorted( ForwardIt first, ForwardIt last, Compare comp ); | (с C++20) | |
template< class ExecutionPolicy, class ForwardIt, class Compare >
bool is_sorted( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
Compare comp );
| (4) | (с C++17) |
Проверяет, отсортированы ли элементы в диапазоне [first, last) в порядке не убывания.
Последовательность отсортирована относительно компаратора comp если для любого итератора it , указывающего на последовательность, и любого неотрицательного целого числа n такого, что it + n является допустимым итератором, указывающим на элемент последовательности, comp(*(it + n), *it) принимает значение false.
operator<.comp.policy. Эти перегрузки не участвуют в разрешении перегрузки, если |
| (до C++20) |
|
| (с C++20) |
Параметры
| first, last | - | диапазон элементов для проверки |
| policy | - | политика выполнения. Подробнее см. политика выполнения. |
| comp | - | объект функции сравнения (т. е. объект, удовлетворяющий требованиям Compare), возвращающий true , если первый аргумент меньше (т. е. отсортирован раньше) второго. Подпись функции сравнения должна быть эквивалентна следующей:
Хотя подпись не обязана иметь const&, функция не должна изменять переданные ей объекты и должна быть способна принимать все значения типа (возможно const) |
| Требования к типу | ||
-ForwardIt должен удовлетворять требованиям LegacyForwardIterator. |
||
Результат
true если элементы в диапазоне отсортированы в порядке не убывания.
Сложность
Линейная по расстоянию между first и last.
Исключение
Перегрузки с шаблоном параметра, имеющим имя ExecutionPolicy , сообщают об ошибках следующим образом:
- Если выполнение функции, вызываемой в рамках алгоритма, вызывает исключение, и
ExecutionPolicyявляется одной из стандартных политик, вызываетсяstd::terminate. Для любой другойExecutionPolicy, поведение определяется реализацией. - Если алгоритм не может выделить память, выбрасывается
std::bad_alloc.
Возможная реализация
См. также реализации в libstdc++ и libc++.
| is_sorted (1) |
|---|
template<class ForwardIt>
bool is_sorted(ForwardIt first, ForwardIt last)
{
return std::is_sorted_until(first, last) == last;
} |
| is_sorted (3) |
template<class ForwardIt, class Compare>
bool is_sorted(ForwardIt first, ForwardIt last, Compare comp)
{
return std::is_sorted_until(first, last, comp) == last;
} |
Примечания
std::is_sorted возвращает true для пустых диапазонов и диапазонов длиной в один элемент.
Пример
#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<>{}));
}См. также
|
(C++11) | находит наибольший отсортированный поддиапазон (функция-шаблон) |
|
(C++20) | проверяет, отсортирован ли диапазон по возрастанию (niebloid) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm/is_sorted