Das folgende Programm kompiliert nicht. Aber wenn ich operator==
nicht auskommentiere, kompiliert es. Warum ist operator==
noch benötigt, wenn ich bereits FooEqual
Kann nicht vergleichen std :: unorded_set mit benutzerdefinierten 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;
}
Muss ein Fehler in der Implementierung sein ... es sei denn, die Spezifikation besagt, dass 'KeqEqual' nur zum Einfügen/Suchen verwendet wird und dass' std :: unordered_set :: operator == 'prüft, ob zwei Sätze gleich sind, abhängig davon, ob die einzelnen Elemente vergleichen gleich? Braucht hier vielleicht einen C++ - Anwalt. – dreamlax