c++中map与unordered_map的区别

头文件

  • map: #include < map >
  • unordered_map: #include < unordered_map >

内部实现机理

  • map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。
  • unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的

优缺点以及适用处

  • map

    • 优点:

      • 有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作
      • 红黑树,内部实现一个红黑书使得map的很多操作在lgnlgn的时间复杂度下就可以实现,因此效率非常的高
    • 缺点: 
      • 空间占用率高,因为map内部实现了红黑树,虽然提高了运行效率,但是因为每一个节点都需要额外保存父节点,孩子节点以及红/黑性质,使得每一个节点都占用大量的空间
    • 适用处,对于那些有顺序要求的问题,用map会更高效一些
  • unordered_map 
    • 优点:

      • 因为内部实现了哈希表,因此其查找速度非常的快
    • 缺点: 
      • 哈希表的建立比较耗费时间
    • 适用处,对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map

note:

  • 对于unordered_map或者unordered_set容器,其遍历顺序与创建该容器时输入元素的顺序是不一定一致的,遍历是按照哈希表从前往后依次遍历的

转载于:https://www.cnblogs.com/zb-ml/p/9031578.html

原 c++中map与unordered_map的区别相关推荐

  1. c++ map是有序还是无序的_c++中map与unordered_map的区别

    map: 优点: 有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作 红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,因此效率非常的高 缺点 ...

  2. Stream中map和flatmap的区别,一看就懂

    在日常开发中,我们经常会使用Stream来处理集合的操作. 其中,map是我们经常用到的api方法,同时呢,Stream也给我们提供了flatmap的方法. 这时候很多小伙伴就会搞不懂,这map和fl ...

  3. JS中map和foreach的区别以及some和every的用法

    转载自:小猪冒泡 的 原生JS forEach()和map()遍历 一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项.2.forEach() 和 map() ...

  4. map与unordered_map的区别

    set/map底层实现的机制是红黑树.红黑树是一种近似于平衡的二叉查找树,默认是按升序排序的.在红黑树上做查找.插入.删除操作的时间复杂度为O(logN). 红黑树的缺点:空间占用率高,每一个节点都需 ...

  5. C++中map与unordered_map, set与unordered_set

    散列表和红黑树 哈希函数和散列表很普遍,在此就不介绍了.下面介绍一下红黑树的概念(代码太难了 溜了溜了 等我成为大佬再钻研) 红黑树的定义: 每个节点非红即黑 根节点是黑的; 每个叶节点(叶节点即树尾 ...

  6. 如何形象的解释javascript中map,foreach,reduce的区别

    作者:尤雨溪 https://www.zhihu.com/answer/29478982 应题主要求来个形象的:假设我们有一个数组,每个元素是一个人.你面前站了一排人.foreach 就是你按顺序一个 ...

  7. 老卫带你学---C++中map与pair的区别

    1.pair的类型:pair是一种模版类型.每个pair 可以存储两个值.这两种值的类型没有限制,也可以将自己写的类放进去. 2.pair 应用:如果一个函数有两个返回值的话,如果是相同类型,就可以用 ...

  8. c++中map、multimap、unordered_map、unordered_multimap的区别

    前言: c++的各种容器使用的时候很方便,但是如果作为一个初学者,看到一堆库要记住也是很头疼的,而且很多库名称会很相似,所以我们要很好的使用这些库的时候,我们需要了解清楚它们底层实现的原理,这样我们使 ...

  9. map和unordered_map的用法和区别

    用法 定义一个关联容器 需要分别包含头文件 #include<map> #include<unordered_map> map/unordered_map是一个关联容器,它按照 ...

最新文章

  1. 网络工程师职业发展解读
  2. NLP分析技术的三个层面
  3. 2020年中国医疗数据中心市场规模及发展趋势预测分析
  4. python加密反编译_对Python源码进行加密及反编译前后对比
  5. 聊一聊mongodb中的 explain 和 hint
  6. uniitest怎么传参数
  7. “用户、组或角色'XXX'在当前数据库中已存在”问题
  8. cookie中转注入
  9. Nginx 进程间通信
  10. Android学习资料网站搜集
  11. python实现语义分割_遥感图像语义分割常用精度指标及其python实现(支持多类)
  12. php在线文件编辑管理器 在线文本查看PHP插件
  13. 各种类型的电影排行榜-movie路线
  14. 从键盘输入字符串,按回车键结束,在第二行显示输入内容。
  15. 博乐科技2022校招内推
  16. smtp发送QQ邮件
  17. 【Python】把excel文件中的数据转化为字典格式存起来
  18. ISTQB认证考试通过秘籍 问题一、ISTQB是什么?有哪些分类? ISTQB(International Software Testing Qualification Board)是国际唯一权威的软
  19. Unexpected token o in JSON at position 1报错
  20. MySQL之流程函数

热门文章

  1. MAPREDUCE实践篇(1)
  2. javascript TODO
  3. J2SE,J2ME,J2EE解释
  4. Visual Studio 2010 and .NET 4 RTM中文版发布
  5. Windows Small Business Server 2003 意外关闭 ; 1001, 1013 和 1014 事件记录
  6. 软件包管理 之 Fedora Extras(Fedora 计划的扩充资源) rpm.livna.org软件仓库的介绍和应用...
  7. 如何定义研发KPI:以团队速度为标准
  8. IIS 的身份验证简要说明 - 摘录
  9. gunzip 和 unzip 解压文件到指定的目录
  10. git warning: LF will be replaced by CRLF in 解决办法