我有一双 我知道这对的价值。第一次不能超过1000。 我也知道pair.second,字符串,总是1个字。不超过1个字 因此,要为该对构造Hash值,我将执行以下操作:
pair<int,string> p;
hash<char*> H;
hash_vale = H(p.second)*1000 + p.first;
我认为只要字符串的哈希值不是太大而且H(p.second)将给出1-1映射,这将给出唯一值。这些假设是否有效?
谢谢,
答案 0 :(得分:4)
根据定义,由于鸽子原则,哈希不能是一对一的。 I.E.,有2 ^ 32个可能的哈希值,但是更多可能的字符串。所以必须有两个具有相同哈希值的字符串。
其次,你几乎肯定会通过将哈希值乘以1000来引起溢出,因为哈希应该使用全部32位。散列int然后混合哈希,你会好得多。 Boost具有hash_combine
函数:a + 0x9e3779b9 +(b <&lt; 6)+(b&gt;&gt; 2);