组合 C 0x 中的哈希值
C 0x 引入了哈希 template,它提供了通用的哈希函数。然而,Boost 中实现的 hash_combine 函数本身并不包含在内。本文探讨了在 C 0x 中实现此类函数的实用方法。
使用 xor_combine 的解决方案
一种方法是利用 C 0x 的 xor_combine。该函数通过异或来组合两个哈希值。下面是一个示例实现:
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { seed ^= hash<T>{}(v); }
此方法只是将值 v 的哈希值与种子进行异或。
使用 Boost 的 hash_combine 的解决方案
或者,您可以调整 Boost 实现hash_combine:
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { std::hash<T> hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); }
该函数使用 std::hash 计算 v 的哈希值并使用按位 XOR 运算将其与种子组合。
两种方法都提供了组合 C 0x 中的哈希值的方法。实现的选择取决于应用程序的具体要求。
以上是如何高效组合C 0x中的哈希值?的详细内容。更多信息请关注PHP中文网其他相关文章!