我想在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) { /* ... */ }
为什么会这样?
答案 0 :(得分:4)
您必须将operator<
定义为
inline bool operator< (const Type& rhs) const { /* ... */ }
因为地图会在内部存储const key
。
为了扩展一点,我还建议(如评论中已经dyp那样)你尽可能使用非成员运算符重载。它们有各种各样的优点。我不会在这里列出它们,因为已经有关于优势/差异的良好信息,请让我链接到Operator overloading : member function vs. non-member function?。