C++名前付き要件: Compare
From cppreference.com
Compare は、標準ライブラリのいくつかの機能が、ユーザーが提供する関数オブジェクト型に期待する要件のセットです。
Compare を満たす型のオブジェクトに適用される関数呼び出し演算の戻り値は、bool型に変換されると、呼び出しの最初の引数が、この型によって誘導される厳密弱順序付け関係において2番目の引数の前に現れる場合はtrueを、それ以外の場合はfalseを返します。
他のBinaryPredicateと同様に、その式の評価では、デリファレンスされたイテレータを介して非const関数を呼び出すことはできません。構文的には、関数呼び出し演算はconstオブジェクト引数を受け入れなければならず、引数がconstであるか非constであるかに関わらず、同じ動作をします。
目次 |
[編集] 要件
型TがCompareを満たすのは、
- 型
TがBinaryPredicateを満たし、かつ
以下を考えます。
-
comp(型Tのオブジェクト) - equiv(a, b) は、!comp(a, b) && !comp(b, a)と式として等価です。
以下の式は有効であり、指定された効果を持たなければなりません。
| Expression | 戻り値の型 | 要件 | ||||
|---|---|---|---|---|---|---|
| comp(a, b) |
|
以下のプロパティを持つ厳密弱順序付け関係を確立します。
| ||||
| equiv(a, b) | bool | 以下のプロパティを持つ同値関係を確立します。
|
注: comp は、equivによって決定される同値クラスに厳密全順序を誘導します。
[編集] 標準ライブラリ
以下の標準ライブラリ機能はCompare型を期待します。
| ユニークなキーのコレクション、キーによってソートされる (class template) | |
| キーでソートされたキーと値のペアのコレクション、キーは一意 (クラステンプレート) | |
| キーによってソートされたキーのコレクション (クラステンプレート) | |
| キーによってソートされたキーと値のペアのコレクション (クラステンプレート) | |
| コンテナを優先度付きキューとして提供するよう適合させる (クラステンプレート) | |
| 範囲を昇順にソートする (関数テンプレート) | |
| 要素をソートする ( std::forward_list<T,Allocator>のパブリックメンバ関数) | |
| 要素をソートする ( std::list<T,Allocator>のパブリックメンバ関数) | |
| 等しい要素間の順序を維持しながら要素の範囲をソートする (関数テンプレート) | |
| 範囲の最初のN個の要素をソートする (関数テンプレート) | |
| 要素の範囲をコピーして部分的にソートする (関数テンプレート) | |
| (C++11) |
範囲が昇順にソートされているかどうかをチェックする (関数テンプレート) |
| (C++11) |
ソートされている最大のサブ範囲を見つける (関数テンプレート) |
| 与えられた範囲を部分的にソートし、指定された要素によってパーティション化されるようにする (関数テンプレート) | |
| 与えられた値より小さくない最初の要素へのイテレータを返す (関数テンプレート) | |
| 特定の値より大きい最初の要素へのイテレータを返す (関数テンプレート) | |
| 部分的に順序付けられた範囲に要素が存在するかどうかを判断する (関数テンプレート) | |
| 特定のキーに一致する要素の範囲を返す (関数テンプレート) | |
| 2つのソート済み範囲をマージする (関数テンプレート) | |
| ソート済みの2つのリストをマージする ( std::forward_list<T,Allocator>のパブリックメンバ関数) | |
| ソート済みの2つのリストをマージする ( std::list<T,Allocator>のパブリックメンバ関数) | |
| 2つの順序付けられた範囲をインプレースでマージする (関数テンプレート) | |
| あるシーケンスが別のシーケンスの部分シーケンスである場合に true を返す (関数テンプレート) | |
| 2つの集合の差を計算する (関数テンプレート) | |
| 2つの集合の積を計算する (関数テンプレート) | |
| 2つの集合の対称差を計算する (関数テンプレート) | |
| 2つの集合の和を計算する (関数テンプレート) | |
| 最大ヒープに要素を追加する (関数テンプレート) | |
| 最大ヒープから最大の要素を削除する (関数テンプレート) | |
| 要素の範囲から最大ヒープを作成する (関数テンプレート) | |
| 最大ヒープを昇順にソートされた要素の範囲に変換する (関数テンプレート) | |
| (C++11) |
与えられた範囲が最大ヒープであるかをチェックする (関数テンプレート) |
| (C++11) |
最大ヒープである最大のサブ範囲を見つける (関数テンプレート) |
| 与えられた値のうち大きい方を返す (関数テンプレート) | |
| 範囲内で最大の要素を返す (関数テンプレート) | |
| 与えられた値のうち小さい方を返す (関数テンプレート) | |
| 範囲内で最小の要素を返す (関数テンプレート) | |
| (C++11) |
2つの要素の小さい方と大きい方を返す (関数テンプレート) |
| (C++11) |
範囲内で最小の要素と最大の要素を返す (関数テンプレート) |
| ある範囲が別の範囲より辞書順で小さい場合に true を返す (関数テンプレート) | |
| 要素の範囲の次に大きい辞書順の順列を生成する (関数テンプレート) | |
| 要素の範囲の次に小さい辞書順の順列を生成する (関数テンプレート) |
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2114 (P2167R3) |
C++98 | 戻り値の型からboolへの文脈的変換が 実装の実践を反映していなかった |
要件が修正された |
| LWG 3031 | C++98 | const値に関する要件が不十分だった | 要件が強化された |
[編集] 関連項目
| (C++20) |
relationが狭義の弱順序を課すことを規定する(コンセプト) |
| 比較演算子 | <, <=, >, >=, ==, !=, および <=> (C++20), 引数を比較する |