如何自定义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都保持不变。
提前致谢
答案 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>>
对你的情况非常有帮助。