使用自定义比较功能设置相等

时间:2017-01-22 19:03:06

标签: c++ stl set operators equality

我正在使用多组用户定义类型和自定义比较功能。当我尝试在集合之间使用==运算符时,我得到编译时错误。我错过了什么?

#include <cassert>
#include <set>

// my user-defined type
struct IntWrapper {
    int value;
};

// my compare function
struct LessComparer {
    bool operator()(const IntWrapper& lhs, const IntWrapper& rhs) const {
        return lhs.value < rhs.value;
    }
};

int main() {
    std::set<IntWrapper, LessComparer> s;
    assert(s == s);  // I would expect this to work
}

Here you can see the error.

1 个答案:

答案 0 :(得分:4)

http://en.cppreference.com/w/cpp/container/set/operator_cmp

  

Key必须满足EqualityComparable的要求才能使用重载(1-2)。

http://en.cppreference.com/w/cpp/concept/EqualityComparable

  

如果是,则类型T满足EqualityComparable   给定a,b和c,类型为T或const T的表达式   以下表达式必须有效并具有指定的效果:
  a == b

因此,您需要为operator==类型定义IntWrapper