当前位置: 首页 > news >正文

map和unordered_map

一、map和unordered_map的基本概念——它们是啥?

  • map:是一种“有序的关联容器”,存放一组“键值对”,内部元素按键排序(默认是升序),类似一本按字母排序的字典。

  • unordered_map:也是存放“键值对”,但它是“无序的”,通过哈希表实现,存储顺序不可预知。


二、底层原理——为什么它们的速度和排序不一样?

1. map的底层结构

  • 基于平衡二叉搜索树(如红黑树)
  • 结构类似一棵彩色的“红黑树”
  • 节点存放键值对,树的中序遍历可以得到有序结果
  • 查找、插入、删除时间复杂度:都在**O(log n)**范围

2. unordered_map的底层结构

  • 基于哈希表(散列表)
  • 存储元素通过哈希函数映射到桶(桶是数组位置)
  • 数组和链表(或者开地址法)结合实现
  • 查找、插入、删除时间复杂度:平均为O(1),最坏情况下可能变成O(n)(比如哈希碰撞严重)

三、性能对比——哪个快?什么情况下用哪个?

比较维度mapunordered_map
底层结构红黑树哈希表
有序性有序(按键排序)无序(无序存储)
查找/插入/删除O(log n)平均 O(1),最坏 O(n)
迭代速度稍慢(因为树的中序遍历)较快(直接哈希桶遍历)
空间复杂度较大(存树结构)一般较小(哈希表)
适用场景需要元素按键排序快速查找,不关心顺序

四、通俗比喻:你买书和整理书架

想象一下:

  • map:你把书按照书名 alphabetical order 排好,每次查找、插入都像沿着一棵“有序的树”来找,耗费大约“走路的路程”是 O(log n)。

  • unordered_map:你用一个快递箱(哈希函数)把书存起来。想拿某一本书,只需要特定“快递单号”,基本上快速到达(O(1)),但有时候“快递箱”的标签碰撞(哈希冲突)就会得慢一些(最坏 O(n))。


五、具体使用建议——什么时候用map,什么时候用unordered_map?

场景推荐容器理由
需要从小到大遍历所有元素map有序,遍历顺序有序(比如字典序)
追求最大速度查找unordered_map平均O(1),查找快
元素需要按顺序处理map支持排序,方便按顺序操作
不关心元素顺序,只要快unordered_map速度快,特别大量数据时效果明显

六、额外细节:一些特定的注意点和坑

  • 哈希冲突:unordered_map的性能依赖哈希质量,当哈希冲突多了,性能可能下降;
  • 键的类型:自定义类型作为键时,要定义合适的哈希函数,否则unordered_map不能使用;
  • 空间利用:hash表会消耗更多内存,红黑树占用空间较少但操作更慢;
  • 排序需求:如果你需要元素的排序,必须用map。

总结一句话

  • map:用“红黑树”实现,有序存储查找复杂度O(log n),适合需要排序、稳定排序结果的场景;
  • unordered_map:用“哈希表”实现,无序存储平均查找O(1),用于追求极限速度的场景。

相关文章:

  • 树莓派3B+ wiringPi库安装
  • Gin 框架指南(代码+通俗解析版)
  • linux - 权限的概念
  • 嵌入式开发学习日志(数据结构--单链表)Day20
  • docker-compose——安装mysql8
  • 【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)
  • GAN简读
  • 我的多条件查询
  • C2S-Scale:Cell2Sentence v2
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的CNC机床控制器技术方案‌
  • Ubuntu磁盘空间分析:du命令及常用组合
  • [思维模式-37]:什么是事?什么是物?什么事物?如何通过数学的方法阐述事物?
  • 360智语:以全栈技术重塑企业级智能体开发新标杆
  • 【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略
  • 基于 art 下的类加载机制,实现函数抽取壳
  • 嵌入式C语言中指针的不同类型及其特点分析
  • idea springboot 配置文件 中文显示
  • 高速系统设计实例设计分析二
  • CSS:选择器的优先级
  • 【Dify系列教程重置精品版】第九章:在Dify对话中显示本地图片(下)
  • “一百零一个愿望——汉字艺术展”亮相意大利威尼斯
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 上海现有超12.3万名注册护士,本科及以上学历占一半
  • 老人将房产遗赠给外孙,三个女儿却认为遗嘱应无效,法院判了
  • 水豚“豆包”出逃已40天,扬州茱萸湾景区追加悬赏