boost::hash_combine 与简单异或运算

2024-03-26

使用boost库时,函数boost::hash_combine工作原理如下:

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

http://www.boost.org/doc/libs/1_46_1/doc/html/hash/reference.html#boost.hash_combine http://www.boost.org/doc/libs/1_46_1/doc/html/hash/reference.html#boost.hash_combine

与简单的异或运算相比,这种方法有什么优点?

通过异或运算,我们甚至可以使用散列函数来使用无序容器作为键,而这与顺序相关。


有许多有序的容器,例如列表。如果你使用 XOR 那么你基本上会说[0, 1]是相同的[1, 0]。显然事实并非如此。重写无序容器的方法比为有序容器强加会产生大量冲突的方法要容易得多。 XOR 还有很多其他令人讨厌的特性。例如,如果您有重复的元素,那么它们将相互抵消。

最后,哈希的想法是合理地确保多个元素不会获得相同的值。 XOR 本身并不适合该属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost::hash_combine 与简单异或运算 的相关文章

随机推荐