以下を実装するstl/boostタイプがあるかどうか疑問に思っています。
提供されたバイナリ述語に従って要素を順序付けられた状態に保つペアが必要です。つまり、常に条件に対応しますPredicate(pair.first, pair.second) == true
。
より具体的には、要素を降順で格納するペア、つまり任意のペアが必要ですpair.first < pair.second
あなたの例のように最初の2番目がフィールドである場合、それらの1つを変更するとペアのメソッドが呼び出されないため、不可能に思えます。メソッドの場合、これを行うのは非常に簡単です。
class UnorderePair{
T first_, second_;
T& first(){
return predicate(first_, second_)? first_: second_;
}
T& second(){
return !predicate(first_, second_)? first_: second_;
}
};
を使用するstd::set
か、ctor に 2 つの要素を予約し、クラスの不変条件を壊す追加/前置/その他のものを破棄するアダプターを作成することができますassert ( length == 2)
。