任何stl / boost类型代表一对有序元素?

时间:2012-12-12 15:22:45

标签: c++ boost stl

我只是想知道是否有任何实现以下的stl / boost类型。

我需要一对根据提供的二元谓词将其元素保持在有序状态的对,即始终对应于条件Predicate(pair.first, pair.second) == true

更具体一点,我需要一对按顺序存储其元素的对,即 对于任何一对pair.first < pair.second

2 个答案:

答案 0 :(得分:3)

如果第一秒是示例中的字段似乎是不可能的,因为当使用时更改其中一个字段时,不会调用任何对的方法。如果这是方法,那么这很容易:

class UnorderePair{
    T first_, second_;
    T& first(){
         return predicate(first_, second_)? first_: second_;
    }
    T& second(){
         return !predicate(first_, second_)? first_: second_;
    }

};

答案 1 :(得分:2)

您可以使用std::set,或者为ctor创建一个适配器,在ctor中保留2个元素,并丢弃任何会破坏类assert ( length == 2)的类不变量的追加/前置/任何内容。