C++ の名前付き要件: BinaryPredicate
From cppreference.com
BinaryPredicate は、標準ライブラリのいくつかの機能がユーザー提供の引数に期待する要件のセットです。
BinaryPredicate bin_pred と、イテレータのペア iter1 と iter2、またはイテレータ iter と (おそらく const) 値 value が与えられた場合、式 bin_pred(*iter1, *iter2) または、それぞれ bin_pred(*iter, value) の型と値カテゴリは、BooleanTestable の要件を満たさなければなりません。
さらに、その式の評価では、間接参照されたイテレータの非 const メンバ関数を呼び出してはなりません。構文的には、述語は const オブジェクト引数を受け入れる必要があり、引数が const であるか非 const であるかに関わらず、同じ動作をする必要があります。
[編集] 要件
- Predicate
- CopyConstructible (特に指定がない限り)
[編集] 標準ライブラリ
以下の標準ライブラリ機能は、Compare 型ではない BinaryPredicate を期待します。
| 連続する重複した要素を削除する ( std::forward_list<T,Allocator> のパブリックメンバ関数) | |
| 連続する重複した要素を削除する ( std::list<T,Allocator> のパブリックメンバ関数) | |
| 特定の範囲内で最後の要素のシーケンスを見つける (関数テンプレート) | |
| 要素の集合のうちいずれか1つを検索する (関数テンプレート) | |
| 等しい(または指定された述語を満たす)最初の2つの隣接する項目を見つける (関数テンプレート) | |
| 2つの範囲が異なる最初の位置を見つける (関数テンプレート) | |
| 2つの要素の集合が同じかどうかを判断する (関数テンプレート) | |
| (C++11) |
あるシーケンスが別のシーケンスの順列であるかを判断する (関数テンプレート) |
| 要素の範囲の最初の出現を検索する (関数テンプレート) | |
| 範囲内である要素が連続して出現する最初の箇所を検索する (関数テンプレート) | |
| 範囲内の連続する重複要素を削除する (関数テンプレート) | |
| 連続する重複を含まない要素の範囲のコピーを作成する (関数テンプレート) | |
| (C++17で非推奨)(C++20で削除) |
カスタムの std::binary_negate オブジェクトを構築する (関数テンプレート) |
| (C++11) |
キーによってハッシュ化されたユニークなキーのコレクション (クラステンプレート) |
| (C++11) |
キーによってハッシュ化されたキーと値のペアのコレクション、キーはユニーク (クラステンプレート) |
| (C++11) |
キーのコレクション、キーによってハッシュ化される (class template) |
| (C++11) |
キーでハッシュ化されたキーと値のペアのコレクション (クラステンプレート) |
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2114 (P2167R3) |
C++98 | 戻り値の型が bool に変換できることの要件が弱すぎた 実装の期待を反映するため |
要件が強化された |
| LWG 3031 | C++98 | const 値に関する要件が不十分だった |
要件が強化された |