我正在使用多组用户定义类型和自定义比较功能。当我尝试在集合之间使用==
运算符时,我得到编译时错误。我错过了什么?
#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
}
答案 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
。