Namespaces
Variants

C++ named requirements: Compare

From ja.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> の公開メンバ関数)
要素をソートする
(std::list<T,Allocator> の公開メンバ関数)
要素の範囲をソートし、同等な要素間の相対順序を保持する
(関数テンプレート & アルゴリズム関数オブジェクト)
範囲の最初の N 個の要素をソートする
(関数テンプレート & アルゴリズム関数オブジェクト)
要素の範囲をコピーして部分的にソートする
(関数テンプレート & アルゴリズム関数オブジェクト)
(C++11)
範囲がソート済みかどうか調べる
(関数テンプレート & アルゴリズム関数オブジェクト)
最大のソート済み部分範囲を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
範囲がソートされた場合の N 番目の要素を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
二分探索を使用して、指定された値より小さくない最初の要素を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
二分探索を使用して、指定された値より大きい最初の要素を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
二分探索を使用して、要素が範囲内に存在するか判定する
(関数テンプレート & アルゴリズム関数オブジェクト)
二分探索を使用して、指定された値と一致する要素の範囲を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つのソート済み範囲をマージする
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つのソート済みリストをマージする
(std::forward_list<T,Allocator> の公開メンバ関数)
2 つのソート済みリストをマージする
(std::list<T,Allocator> の公開メンバ関数)
2 つの順序付けられた範囲をインプレースでマージする
(関数テンプレート & アルゴリズム関数オブジェクト)
一方のシーケンスがもう一方の部分列であるか判定する
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つの集合の差集合を計算する
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つの集合の積集合を計算する
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つの集合の対称差を計算する
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つの集合の和集合を計算する
(関数テンプレート & アルゴリズム関数オブジェクト)
要素を最大ヒープに追加する
(関数テンプレート & アルゴリズム関数オブジェクト)
最大ヒープから最大の要素を削除する
(関数テンプレート & アルゴリズム関数オブジェクト)
要素の範囲から最大ヒープを作成する
(関数テンプレート & アルゴリズム関数オブジェクト)
最大ヒープを昇順にソートされた要素の範囲に変換する
(関数テンプレート & アルゴリズム関数オブジェクト)
(C++11)
指定された範囲が最大ヒープかどうか調べる
(関数テンプレート & アルゴリズム関数オブジェクト)
最大ヒープである最大の部分範囲を見つける
(関数テンプレート & アルゴリズム関数オブジェクト)
与えられた値の大きい方を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
範囲内の最大の要素を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
与えられた値の小さい方を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
範囲内の最小の要素を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
(C++11)
2 つの要素の小さい方と大きい方を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
範囲内の最小と最大の要素を返す
(関数テンプレート & アルゴリズム関数オブジェクト)
2 つの範囲を辞書順で比較する
(関数テンプレート & アルゴリズム関数オブジェクト)
要素の範囲の次の辞書順でより大きな順列を生成する
(関数テンプレート & アルゴリズム関数オブジェクト)
要素の範囲の次の辞書順でより小さな順列を生成する
(関数テンプレート & アルゴリズム関数オブジェクト)

不具合報告

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

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

関連項目

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