次のプログラムはコンパイルされません。しかし、もし私がoperator==
をコメントアウトしなければ、それはコンパイルされます。私はすでにhttp://en.cppreference.com/w/cpp/container/unordered_set/operator_cmpによるFooEqual
std :: unorded_setとカスタムKeyEqualを比較できません
#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;
}
specは、 'KeqEqual'は挿入/参照にのみ使われ、' std :: unordered_set :: operator == 'は2つのセットが等しいかどうかをチェックする個々の要素は等しいと見なされますか?ここにC++の弁護士が必要かもしれません。 – dreamlax