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