C ++:ptr_container比较

时间:2010-10-08 22:32:19

标签: c++ boost comparison

如何自定义ptr_container中元素的比较?使用ptr_set,我想定义一个检查元素相等性的函数。但是,定义

bool operator==(const Foo& other) (or a friend function)

不起作用。它只是不会被调用,尽管另一方面,boost的无序容器知道重载的operator == s。预测la:

struct FooEq
{
    bool operator()(const Foo& foo1, const Foo& foo2) const
};

也不起作用,我找不到描述如何完成此操作的参考。

struct Foo
{
    Foo(int i, int j) : _i(i), _j(j) {}

    bool operator<(const Foo& other) const { return this->_i < other._i; }

    bool operator==(const Foo& other) const
    {
        std::cout << "== involed";

        return this->_j == other._j;
    }

    int _i;
    int _j;
};

boost::ptr_set<Foo> foos;
std::cout << foos.size() << "\n";
foos.insert(new Foo(1, 2));
std::cout << foos.size() << "\n";
foos.insert(new Foo(2, 2));
std::cout << foos.size() << "\n";

foos应该是相等的,因为j == 2都保持不变。

提前致谢

2 个答案:

答案 0 :(得分:1)

Set使用&lt;运算符插入项并测试等价(与等式不完全相同)。该运算符必须定义严格的弱排序。 Set不会使用==运算符。

引自set:

的描述
  

比较:比较类:一个类   这需要两个相同的参数   键入容器元素和   返回一个布尔。表达方式   comp(a,b),其中comp是对象   这个比较类和a和b是   容器的元件,应   如果a要放在a处,则返回true   比严格的b更早的位置   弱订货操作。这个可以   或者是一个实现一个的类   函数调用操作符或指向   一个函数(参见一个函数的构造函数)   例)。默认为较少,   返回与应用相同的   小于运营商(a

如果你详细说明了你想要完成的任务,我可以为更好的容器提供建议。

答案 1 :(得分:0)

我无法理解你的情况。但是,您可以使用std :: set。它不支持重复。

set<shared_ptr<T>> 

对你的情况非常有帮助。