Namespaces
Variants

std:: is_sorted

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
is_sorted
(C++11)

Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
ヘッダーで定義 <algorithm>
template < class ForwardIt >
bool is_sorted ( ForwardIt first, ForwardIt last ) ;
(1) (C++11以降)
(constexpr since C++20)
template < class ExecutionPolicy, class ForwardIt >

bool is_sorted ( ExecutionPolicy && policy,

ForwardIt first, ForwardIt last ) ;
(2) (C++17以降)
template < class ForwardIt, class Compare >
bool is_sorted ( ForwardIt first, ForwardIt last, Compare comp ) ;
(3) (C++11以降)
(constexpr since 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 ) 内の要素が非降順でソートされているかどうかをチェックします。

1) 要素が ソート済み であるかどうかをチェックします( operator < (C++20以前) std:: less { } (C++20以降) に関して)。
3) 要素が comp に関してソートされているかどうかをチェックします。
2,4) (1,3) と同様ですが、 policy に従って実行されます。
これらのオーバーロードは、以下のすべての条件が満たされる場合にのみオーバーロード解決に参加します:

std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> true であること。

(C++20まで)

std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> true であること。

(C++20以降)

目次

パラメータ

first, last - 検査する要素の範囲を定義するイテレータのペア
policy - 使用する実行ポリシー
comp - 比較関数オブジェクト(つまり Compare の要件を満たすオブジェクト)。最初の引数が2番目の引数より 小さい (つまり 前に順序付けられる )場合に​ true を返す。

比較関数のシグネチャは以下と同等であるべきです:

bool cmp ( const Type1 & a, const Type2 & b ) ;

シグネチャが const & を持つ必要はありませんが、関数は渡されたオブジェクトを変更してはならず、 値カテゴリ に関係なく型(おそらくconstの) Type1 Type2 のすべての値を受け入れられる必要があります(したがって、 Type1& は許可されません 、また Type1 も、 Type1 に対してムーブがコピーと等価でない限り許可されません (C++11以降) )。
Type1 Type2 は、 ForwardIt 型のオブジェクトが間接参照可能で、それら両方に暗黙的に変換可能でなければなりません。 ​

型要件
-
ForwardIt LegacyForwardIterator の要件を満たさなければならない。
-
Compare Compare の要件を満たさなければならない。

戻り値

true 範囲内の要素が非減少順にソートされている場合、 false それ以外の場合。

計算量

与えられた N std:: distance ( first, last ) として:

1,2) O(N) 回の比較を operator < (C++20まで) std:: less { } (C++20以降) を使用して行います。
3,4) O(N) 回の比較子 comp の適用。

例外

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 は空の範囲および長さ1の範囲に対して 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()) && "空の範囲は常にソート済み");
    v.push_back(42);
    assert(std::is_sorted(v.cbegin(), v.cend()) && "サイズ1の範囲は常にソート済み");
    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<>{}));
}

関連項目

最大のソート済み部分範囲を検索する
(関数テンプレート)
範囲が昇順にソートされているかどうかをチェックする
(アルゴリズム関数オブジェクト)