[c++] boost :: hash_combine中的幻数


Answers

看看1997年鲍勃詹金斯DDJ文章 。 魔术常数(“黄金比例”)解释如下:

黄金比例确实是一个任意值。 其目的是避免将全零映射到全零。

Question

boost::hash_combine模板函数接受一个散列(称为seed )和一个对象v的引用。 根据docs ,它将seedv的散列结合在一起

seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);

我可以看到这是确定性的。 我明白为什么使用XOR。

我敢打赌,这种增加有助于将相似的值映射到很远的地方,所以探测哈希表不会中断,但是有人能解释一下这个魔术常量是什么吗?




Related