ハッシュ関数(定数0を返す)が効果を発揮しないように見えるのはなぜですか?unordered_map - ハッシュ関数は無効です
ハッシュ関数が一定に戻っているので、出力としてすべての値が3になると予想していましたが、ハッシュ関数が定数であるかどうかにかかわらず、std::vector
の値を一意の値に一意にマップしているようです。取得
#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;
}
出力:
1=1
2=2
3=3
予想される出力:
1=3
2=3
3=3
私はハッシュについて何をしないのですか?
偶然、異なるデータに対してハッシュが同じになったときにデータが消えてしまうことを除きますか? – MikeCAT
私は消滅するとは思わない。しかし、私は、ハッシュ関数が異なるキーを同じ位置にマッピングする場合、データを上書きすることを期待しています。 – rkioji
'table [your_hash_function(your_data)] = your_data;' table'は 'std :: unordered_map'です。 – MikeCAT