gpt4 book ai didi

c++ - boost::hash_combine 与简单的异或运算

转载 作者:可可西里 更新时间:2023-11-01 17:56:45 24 4
gpt4 key购买 nike

当使用 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

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

通过 XOR-ing,甚至可以使用散列函数将无序容器用作键,而这个容器是顺序相关的。

最佳答案

有很多有序的容器,比如列表。如果您要使用 XOR,那么您基本上会说 [0, 1][1, 0] 相同。显然不是这样。覆盖无序容器的方法比强加一个会为有序容器造成大量冲突的方法要容易得多。 XOR 有很多其他讨厌的属性。例如,如果您有重复的元素,那么它们将相互抵消。

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

关于c++ - boost::hash_combine 与简单的异或运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29883840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com