c++ - 如何散列 unordered_map?

标签 c++ boost hash unordered-map

boost::hash具有适用于大多数内置类型(包括容器)的哈希函数。

但如 boost::hash_range function description 中所述, 范围的哈希算法

is sensitive to the order of the elements so it wouldn't be appropriate to use this with an unordered container

因此,std::unordered_mapboost::unordered_map 都没有 boost::hash 特化。


问题是:

是否有一种“简单有效”的方法来散列 unordered_map 而无需从头开始重新实现散列算法?

最佳答案

这里的问题是无法保证这些项目甚至在它们之间有顺序。
因此,对项目进行排序很可能不适用于任意未排序的容器。您有 2 个选择:

  1. 只需对所有单个元素的哈希值进行异或运算。这是最快的。
  2. 首先对容器的散列 进行排序,然后然后 对它们进行散列。这可能会产生更好的散列。

关于c++ - 如何散列 unordered_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245624/

相关文章:

c++ - 如何获取 UPS 的状态?

c++ - 编译纯 C 和 C++

c++ - 将运行时参数传递给 odeint 集成器

c++ - C++中的无符号整数提升

c++ - 函数指针数组作为参数

c++ - 使用 boost locale : different behaviour on windows and linux 进行字符串转换

c++ - 使用 Clang 编译 Boost 时出错

javascript - 如何在JavaScript中将整数转换为指定字符集的字符串

php - 根据要求进行 Laravel 哈希检查

ruby - 如何使用ruby更改小写的哈希键