std :: map中用户定义的类:二进制表达式的操作数无效

时间:2014-05-02 23:18:34

标签: c++ c++11

我想在std :: map中使用一个类作为键。

std::map<Type, value> collection;

虽然我定义了operator<,但却不接受密钥:Invalid operands to binary expression ('const Type' and 'const Type')

class Type {
public:
    inline bool operator< (const Type& rhs) { /* ... */ }

为什么会这样?

1 个答案:

答案 0 :(得分:4)

您必须将operator<定义为

inline bool operator< (const Type& rhs) const { /* ... */ }

因为地图会在内部存储const key


为了扩展一点,我还建议(如评论中已经dyp那样)你尽可能使用非成员运算符重载。它们有各种各样的优点。我不会在这里列出它们,因为已经有关于优势/差异的良好信息,请让我链接到Operator overloading : member function vs. non-member function?