我在以下代码中遇到了错误

struct MapKey {
    std::string x;
    std::string y;
}

std::map<MapKey, int> m;

if (m.find(key) != m.end()) {
    ......
}

我收到错误消息,
no match for "operator<" in '__x < __y'

我认为问题在于MapKey需要有一个compare方法,我想知道如何为Mapkey实现一个方法。例如,
struct MapKey {
    bool operator<(const MapKey &key) const {
        ... what shall I put here? ...
    }
    std::string x;
    std::string y;
}

谢谢。

最佳答案

MapKey的定义之后定义它(作为一个自由函数,而不是一个成员函数),并设置为:

bool operator <(MapKey const& lhs, MapKey const& rhs)
{
    return lhs.x < rhs.x || lhs.x == rhs.x && lhs.y < rhs.y;
}

如果定义在头文件中,请确保将运算符定义为inline,否则可能会导致链接器错误。

07-24 14:03