我只是想知道是否有任何实现以下内容的 stl/boost 类型。
我需要一对根据提供的二进制谓词保持其元素处于有序状态,即始终对应于条件Predicate(pair.first, pair.second) == true
。
更具体地说,我需要一个按降序存储其元素的对,即对于任何对pair.first < pair.second
如果第一秒是您的示例中的字段,这似乎是不可能的,因为当使用更改其中一个时,不会调用任何配对方法。如果它的方法很容易做到这一点:
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)
。