You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于std::unordered_map查找原理与内部存储的技术疑问

关于std::unordered_map的几个常见疑问解答
  • 首先纠正一个细节:你遍历std::unordered_map<Foo, Bar>时,迭代器指向的其实是std::pair<const Foo, Bar>(键是const的,不能修改),而std::unordered_map内部确实是以这种键值对的形式存储数据的,你的“误以为”其实是错的——它内部真的存的是这类pair对象。

  • 哈希只针对键(Foo类型的部分),和值(Bar)完全无关。插入元素时,程序会先计算键的哈希值,把整个键值对放到对应的哈希桶里;查找时也是先根据目标键的哈希找到对应桶,再在桶内逐个比较键(用==运算符)来定位到具体的键值对,全程不需要碰值的部分。

  • 调用begin()返回的迭代器,解引用后直接指向容器内部存储的键值对对象,不是临时创建的副本。所以你修改这个pair里的Bar部分(键是const的,没法改),自然会同步到std::unordered_map本身的数据里——因为你操作的就是容器里的原对象。

内容的提问来源于stack exchange,提问作者zantezuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:25:20