【发布时间】:2016-07-10 03:06:44
【问题描述】:
以下程序无法编译。但是如果我不注释掉operator==,它就会编译。为什么在我已经提供FooEqual 的情况下仍然需要operator==
#include <cstddef>
#include <unordered_set>
struct Foo {
};
struct FooHasher {
size_t operator()(const Foo&) const {
return 1;
}
};
struct FooEqual {
bool operator()(const Foo& lhs, const Foo& rhs) const {
return true;
}
};
// bool operator==(const Foo& lhs, const Foo& rhs) {
// return true;
// }
int main() {
std::unordered_set<Foo, FooHasher, FooEqual> s1;
std::unordered_set<Foo, FooHasher, FooEqual> s2;
(void)(s1 == s2);
return 0;
}
【问题讨论】:
-
必须是实现中的错误...除非规范说
KeqEqual仅用于插入/查找,并且std::unordered_set::operator==根据各个元素是否相等来检查两个集合是否相等比较相等?这里可能需要 C++ 语言律师。
标签: c++ c++11 unordered-set