Dlaczego następująca funkcja hash (która zwraca stałą 0) nie przynosi żadnego efektu?unordered_map - Funkcja skrótu nie ma żadnego efektu
Ponieważ funkcja skrótu zwraca stałą, oczekiwałem, że wszystkie wartości wyjściowe będą równe 3. Jednak wydaje się, że wartości std::vector
są unikatowe, niezależnie od tego, czy moja funkcja skrótu jest stała.
#include <iostream>
#include <map>
#include <unordered_map>
#include <vector>
// Hash returning always zero.
class TVectorHash {
public:
std::size_t operator()(const std::vector<int> &p) const {
return 0;
}
};
int main()
{
std::unordered_map<std::vector<int> ,int, TVectorHash> table;
std::vector<int> value1({0,1});
std::vector<int> value2({1,0});
std::vector<int> value3({1,1});
table[value1]=1;
table[value2]=2;
table[value3]=3;
std::cout << "\n1=" << table[value1];
std::cout << "\n2=" << table[value2];
std::cout << "\n3=" << table[value3];
return 0;
}
Uzyskane wyjściowa:
1=1
2=2
3=3
oczekiwany wynik:
1=3
2=3
3=3
Co mi brakuje około hash?
Czy poza danymi, które znikają, gdy hasz stał się taki sam dla różnych danych przez przypadek? – MikeCAT
Nie oczekuję, że zniknie. Ale spodziewam się, że dane zostaną nadpisane, jeśli funkcja mieszająca mapuje różne klucze do tej samej pozycji. – rkioji
Co powiesz na używanie 'table [twoja_nazwa_hash (twoja_dana)] = twoja_data;' gdzie 'tabela' to' std :: unordered_map'? – MikeCAT