目前Boost库中有一个hash_combine函数,它输出32位无符号整数(确切地说是size_t)。以下是一些参考资料:
http://www.boost.org/doc/libs/1_43_0/doc/html/hash/reference.html#boost.hash_combine
http://www.boost.org/doc/libs/1_43_0/doc/html/hash/combine.html
我想探索如何创建64位版本的hash_combine。
首先要获取黄金比例或其他64位的无理数。
第二部分是使用移位操作。这部分相当棘手,我想问一下是否有最佳实践或指南来使用移位操作获取哈希值?还是选择像原始代码一样的移位数:
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
这是完全随机的吗?
另外,如何评估hash_combine
的输出,以确保它不会比原始哈希函数hash_value
创建更多的碰撞?
0x9E3779B97F4A7C15
。 - Kerrek SB