过载运算符<在使用std :: set

时间:2013-11-11 11:40:35

标签: c++ set std operator-keyword

这是我第一次使用std :: set容器,运行符std :: less时出现问题。

我声明了集合:

std::set<MyClass*, std::less<MyClass> > _set;

然后,我为MyClass重载运算符&lt; ;这个问题似乎与class和pointer之间的混合有关,因为我有这个错误信息:

no match for call to '(std::less<MyClass>) (MyClass *const&, MyClass *const&)'

2 个答案:

答案 0 :(得分:3)

您为operator<重叠MyClass,但您的设置指针MyClass

简单的答案是不使用指针。如果您觉得必须使用指针,那么答案就是为您的集合编写自定义比较器。

struct Comp
{
    bool operator()(MyClass* x, MyClass* y);
};

std::set<MyClass*, Comp> _set;

答案 1 :(得分:2)

您只想使用std::set<MyClass>。比较器默认为std::less