【问题标题】:Why is an operator== not sufficient for an std::unordered_map? - C++为什么 operator== 对于 std::unordered_map 来说是不够的? - C++
【发布时间】:2026-01-25 23:50:02
【问题描述】:

为什么我需要同时实现 == 运算符和返回 size_t 的随机运算符?返回 size_t 的方法实际上应该返回什么?

编辑:当我说随机运算符时,我并不是说它没有用。我的意思是,在我看来,我看不出它有什么用,因此是最后一个问题。 7

【问题讨论】:

  • 您不需要随机运算符。您需要为给定的键控类型实例实现一个返回 size 的哈希函数。这是因为unordered_map 是一个哈希映射。
  • 什么是随机运算符
  • 散列元素。阅读关于哈希表的*链接。它基本上为一个对象创建了一个键,并且根据该键,对象会在表中的某个位置。
  • 如果您希望在 unordered_map 之外进行 O(n) 操作,那就去做吧!

标签: c++ map std unordered


【解决方案1】:

散列容器(散列表、散列映射、无序映射)使用散列函数生成单个整数值来表示条目的索引(或键)。这使得查找非常快速,因为(假设我们有很好的散列值分布)一旦我们有了散列,我们只需要查看那个索引。大多数其他存储方法意味着比较一堆东西,直到找到正确的元素。

关于哈希键实际上只有两条规则: 1. 每次调用散列函数时,对于给定的输入,您都会获得相同的键。 2. 不同输入的值不同 - 它不一定是唯一的,但是从相似输入中获得的传播越多越好。

【讨论】: