C ++ STL比较映射无法找到(operator ==)

时间:2017-03-31 17:17:19

标签: c++ stl

我正在尝试比较两个std::map,并且编译器拒绝它,因为它找不到(==)运算符。

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(275): error C2678: binary '==': no operator found which takes a left-hand operand of type 'const foo::Value' (or there is no acceptable conversion)

以下是一个例子。

namespace foo {
    struct Key { int k; };
    struct Value { int val; };
    typedef std::map<Key*,Value> Map;
}

bool operator==(const foo::Value &v1, const foo::Value &v2)
{
    return v1.val == v2.val;
}
bool operator!=(const foo::Value &v1, const foo::Value &v2)
{
    return !(v1 == v2);
}

bool compare(foo::Map &to, const foo::Map &from)
{
    return to != from;
}
  1. 如果我删除命名空间,它就可以。

  2. 如果将==运算符定义为成员,则可以正常运行。

  3. 例如:

    struct Value {
        int val;
        bool operator==(const Value &v) const { return val == v.val; }
        bool operator!=(const Value &v) const { return val != v.val; }
    };
    // elide the other == and !=
    

    我做错了什么?对于我的情况,我更喜欢(==)函数是编译单元的本地函数而不是接口。

1 个答案:

答案 0 :(得分:3)

如果将运算符放在名称空间foo中,那么它就可以运行。