哈希是否< char *> STL中的函数给出char *和size_t之间的1-1映射?

StackOverflow https://stackoverflow.com/questions/1817807

  •  08-07-2019
  •  | 
  •  

我有一双 我知道这对的价值。第一次不能超过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);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top