Il seguente programma non viene compilato. Ma se non commento fuori operator==
, compila. Perché operator==
è nuovamente necessaria quando ho già fornisco FooEqual
Impossibile confrontare std :: unorded_set con KeyEqual personalizzato
#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;
}
Deve essere un bug nell'implementazione ... a meno che la specifica non dica che 'KeqEqual' è usato solo per l'inserimento/ricerca e che' std :: unordered_set :: operator == 'verifica se due insiemi sono uguali in base i singoli elementi sono paragonabili? Potrebbe avere bisogno di un avvocato di lingua C++ qui. – dreamlax