Perché in seguito la funzione di hash (che restituisce la costante 0) non sembra avere alcun effetto?unordered_map - La funzione hash non ha effetto
Poiché la funzione di hash restituisce una costante, mi aspettavo come uscita tutti i valori per essere 3. Tuttavia, sembra mappare in modo univoco i valori std::vector
a un valore univoco, indipendentemente dalla costante della mia funzione di hash.
#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;
}
Ottenuto uscita:
1=1
2=2
3=3
uscita prevista:
1=3
2=3
3=3
Che cosa mi manca circa hash?
Sei eccetto che i tuoi dati spariscono quando l'hash diventa identico per dati diversi per sbaglio? – MikeCAT
Non mi aspetto che svanisca. Ma mi aspetto che i dati vengano sovrascritti se la funzione hash mappa chiavi diverse nella stessa posizione. – rkioji
Come usare la tabella '[your_hash_function (your_data)] = your_data;' dove 'table' è' std :: unordered_map'? – MikeCAT