Namespaces
Variants

C++ named requirements: Compare

From cppreference.net
C++ named requirements

Compare は、標準ライブラリ機能の一部がユーザー提供の関数オブジェクト型に期待する要件の集合です。

関数呼び出し操作の戻り値は、 Compare を満たす型のオブジェクトに適用され、 変換 されて bool となった場合、 呼び出しの第一引数がこの型によって誘導される 厳密弱順序関係 において第二引数より前に現れる場合は true を返し、 それ以外の場合は false を返す。

任意の BinaryPredicate と同様に、その式の評価は非const関数を逆参照されたイテレータを通じて呼び出すことを許可されておらず、構文的には関数呼び出し操作は const オブジェクト引数を受け入れなければならず、引数が const であるか非 const であるかに関わらず同じ動作をしなければなりません。

目次

要件

T は以下の条件を満たす場合 Compare を満たします

与えられた

  • comp 、型 T のオブジェクト、
  • equiv ( a, b ) 式等価 である ! comp ( a, b ) && ! comp ( b, a )

以下の式は有効であり、指定された効果を持たなければなりません:

戻り値の型 要件
comp ( a, b )

BooleanTestable を満たす

(C++20まで)

boolean-testable をモデル化する

(C++20以降)
以下の性質を持つ 狭義弱順序 関係を確立する:
  • すべての a について、 comp ( a, a ) == false
  • もし comp ( a, b ) == true ならば、 comp ( b, a ) == false
  • もし comp ( a, b ) == true かつ comp ( b, c ) == true ならば、 comp ( a, c ) == true
equiv ( a, b ) bool 以下の性質を持つ 同値関係 を確立する:
  • すべての a について、 equiv ( a, a ) == true
  • もし equiv ( a, b ) == true ならば、 equiv ( b, a ) == true
  • もし equiv ( a, b ) == true かつ equiv ( b, c ) == true ならば、 equiv ( a, c ) == true

注記: comp 狭義全順序 equiv によって決定される同値類上に誘導する。

標準ライブラリ

以下の標準ライブラリ機能は Compare 型を要求します。

一意のキーのコレクション、キーでソート
(クラステンプレート)
キーと値のペアのコレクション、キーでソートされ、キーは一意
(クラステンプレート)
キーのコレクション、キーでソート
(クラステンプレート)
キーと値のペアのコレクション、キーでソート
(クラステンプレート)
コンテナを優先度付きキューとして適応させる
(クラステンプレート)
範囲を昇順にソートします
(関数テンプレート)
要素をソートする
( std::forward_list<T,Allocator> のpublicメンバー関数)
要素をソートする
( std::list<T,Allocator> の公開メンバー関数)
等しい要素間の順序を維持しながら要素の範囲をソートする
(関数テンプレート)
範囲の最初のN個の要素をソートする
(関数テンプレート)
要素の範囲をコピーして部分的にソートする
(関数テンプレート)
(C++11)
範囲が昇順にソートされているかどうかをチェックする
(関数テンプレート)
最大のソート済み部分範囲を検索する
(関数テンプレート)
指定された要素によって分割されることを保証しながら、指定された範囲を部分的にソートする
(関数テンプレート)
指定された値 以上 の最初の要素へのイテレータを返す
(関数テンプレート)
特定の値 より大きい 最初の要素へのイテレータを返す
(関数テンプレート)
部分的に順序付けられた範囲内に要素が存在するかどうかを判定する
(関数テンプレート)
特定のキーに一致する要素の範囲を返す
(関数テンプレート)
二つのソート済み範囲をマージする
(関数テンプレート)
二つのソート済みリストをマージする
( std::forward_list<T,Allocator> の公開メンバー関数)
二つのソート済みリストをマージする
( std::list<T,Allocator> の公開メンバ関数)
2つの順序付けられた範囲をその場でマージする
(関数テンプレート)
あるシーケンスが別のシーケンスの部分シーケンスである場合 true を返す
(関数テンプレート)
2つの集合の差を計算する
(関数テンプレート)
2つの集合の積集合を計算する
(関数テンプレート)
2つの集合の対称差を計算する
(関数テンプレート)
2つの集合の和集合を計算する
(関数テンプレート)
最大ヒープに要素を追加する
(関数テンプレート)
最大ヒープから最大要素を削除する
(関数テンプレート)
要素の範囲から最大ヒープを作成する
(関数テンプレート)
最大ヒープを昇順にソートされた要素の範囲に変換する
(関数テンプレート)
(C++11)
指定された範囲が最大ヒープであるかどうかをチェックする
(関数テンプレート)
最大ヒープである最大の部分範囲を検索する
(関数テンプレート)
指定された値のうち大きい方を返す
(関数テンプレート)
範囲内の最大要素を返す
(関数テンプレート)
指定された値のうち小さい方を返す
(関数テンプレート)
範囲内の最小要素を返す
(関数テンプレート)
(C++11)
2つの要素のうち小さい方と大きい方を返す
(関数テンプレート)
範囲内の最小要素と最大要素を返す
(関数テンプレート)
一方の範囲が辞書順でもう一方より小さい場合に true を返す
(関数テンプレート)
要素の範囲の次のより大きい辞書順の順列を生成する
(関数テンプレート)
要素の範囲の次のより小さい辞書順の順列を生成する
(関数テンプレート)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2114
( P2167R3 )
C++98 戻り値型の文脈的変換可能性が bool への
実装の慣行を反映していなかった
要件を修正
LWG 3031 C++98 const 値に関する要件が不十分だった 要件を強化

関連項目

関係が relation 厳密弱順序を課すことを指定する
(コンセプト)
比較演算子 < , <= , > , >= , == , != , および <=> (C++20) , 引数を比較する