c++ - 具有相同散列值的值是否在同一个 std::unordered_map 桶中?

标签 c++ stl c++11

如果 std::unordered_map 的两个键具有相同的哈希值,标准是否保证它们将进入同一个桶?根据模板相等谓词,我们假设键不相等,它们仅具有相同的哈希值。

奖励问题:如果相同的散列并不意味着相同的桶,那么能够单独遍历桶的目的是什么?

最佳答案

具有相同哈希值的对象被无序关联容器放入同一个桶中。因此,两个相等的对象必须具有相同的哈希值。

23.2.5 第 8 段:

The elements of an unordered associative container are organized into buckets. Keys with the same hash code appear in the same bucket.

额外的问题:为什么你可能想要单独遍历桶?

额外答案:因为您想并行处理容器的内容。桶迭代器彼此独立,因此每个线程都可以在不协调的情况下处理一个桶(假设没有新条目添加到容器中)。而且桶的大小应该大致相同,因此它们提供了方便的并行化量程。

关于c++ - 具有相同散列值的值是否在同一个 std::unordered_map 桶中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901346/

相关文章:

c++ - 处理 std::shared_ptr 应该多谨慎?

c++ - C++11之前有类似std::function的东西吗?

c++ - 如何部分禁用 C4244

c++ - 在 C++ 中初始化静态二维 map<int, int>

c++ - 从 STL 列表中删除对象指针

c++ - 根据特定数据过滤 std::set

c++11 - 将 C++ 库放在全局命名空间之外

c++ - C++ 构造函数可以是模板吗?

c++ - 什么时候允许对 c++11 中的类型进行 memcpyed?

c++ - 我可以简单地在分配的内存上调用构造函数,而不是放置新的吗?