map/set/multi_map/multi_sep底层实现是加头节点的红黑树,元素之间有序,当存放的是自定义类型的时候要重载operator<,中序遍历的时候是有序的。增删查的时间复杂度都是O(lgN)

map存放的是键值对<key,value>,,key唯一,value可以重复,不能修改key的值,可以先删除旧的值,再添加新的值,value的值可以修改。

set用户存放的是值,但是底层存放的仍能存放的是键值对,只不过key=value,同样的值是唯一的,不能随便修改value.

mulit_map/multi_set与map/set相比,大部分都是相同的,只是存放的元素可以不唯一,可以重复。

set/multiset不区分键值和实值,其键值就是实值,会根据待定的排序准则,自动将元素排序。两者唯一的不同在于前者不允许元素重复(底层调rb_tree::insert_unique()),而后者允许(底层调用rb_tree::insert_equal())。 
和set相比,map/multimap同时拥有实值(value)和键值(key),其每一个元素都是pair<key,value>,pair的第一个元素是键值,第二个元素是实值。map和multimap的唯一区别在于,map不允许两个元素拥有相同的键值(底层调rb_tree::insert_unique()),而multimap允许存在重复的键值(底层调用rb_tree::insert_equal())。

unordered_map/unordered_set底层实现用了哈希表,

(1)unordered_set存放的是value,unorder_map也是存储的key-value的值,可以通过key快速索引到value,但是不会根据key的大小进行排序,增删查的时间复杂度都是O(1)

(2)同样不能修改key值当存放的是自定义的元素类型的时候,需要定义hash_value函数并且重载operator==,重载operator==是因为,如果两个元素的通过哈希函数计算出的值相同,并不能断定这两个元素就相同,必须再调用operator==。

(3)散列值相同的被存储在一个桶里。当散列容器中有大量数据时,同一个桶里的数据也会增多,造成访问冲突,降低性能。为了提高散列容器的性能,unordered库会在插入元素是自动增加桶的数量,不需要用户指定。但是,用户也可以在构造函数或者rehash()函数中,指定最小的桶的数量

unordered_map/unordered_set  与map/set结论:

运行效率方面:unordered_map/unordered_set 最高,而map/set效率较低但 提供了稳定效率和有序的序列。

占用内存方面:map/set内存占用略低,unordered_map/unordered_set内存占用略高,而且是线性成比例的。

map/set/multi_map/multi_set/unorder_map/unorder_set总结相关推荐

  1. 游戏研发面经汇总(C++语言,前部分贴上连接进行了解答)

    作者:leottt 链接:https://www.nowcoder.com/discuss/46728?type=post&order=time&pos=&page=1 来源: ...

  2. C++ 常用容器成员函数用法总结

    C++ 常用容器成员函数用法总结 C++ 常用容器成员函数用法总结 简介 迭代器 简介 array: 静态数组 简介 构造函数 访问 / 赋值 迭代器 下标 / at 批量赋值 swap (交换函数) ...

  3. Hash,位图,布隆过滤器

    文章目录 哈希概念 哈希冲突 哈希函数 除留余数法--(非常常用) 直接定址法--(常用) 平方取中法--(了解) 折叠法--(了解) 随机数法--(了解) 数学分析法--(了解 ) 哈希冲突解决 闭 ...

  4. STL 容器 与 数据结构

    一.序列式容器(各元素之间是线性关系,vector, deque,list):迭代器类型,随机访问迭代器(list是双向访问迭代器,不支持随机访问).  1.vector,向量 相当于动态数组,当程序 ...

  5. ACM算法模板总结(分类详细版)

    本文模均引用于y总的算法模板,网址:AcWing (转载请注明出处,本文属于持续更新ing.......biubiubiu......) 本人码风比起y总真的差远了,所以敲一遍后,还是想把y总的搬上来 ...

  6. 0.总也记不住的考场or竞赛必备stl各种用法及其他技巧

    写在前面: 以下均以c++为例,个别是C,部分通用. 这个文章是写给自己方便回忆看的,本人也尽量让笔记整洁有条理,觉得写得不好直接×掉即可 欢迎交流 目录 0. 万能头文件(实际上很多复试不可以用): ...

  7. c++ map是有序还是无序的_c++ unorder_map的用法

    1.unorder_map与map不同:map的KEY值是有序的,而unorder_map则是无序的: 2.unorder_map自定义的KEY值时需要注意思下面两点: · KEY为一个类时,需要重载 ...

  8. STL系列:map和unordered_map

    map和unordered_map的使用 unordered_map的用法和map是一样的,提供了insert,size,count,find等操作,并且里面的元素也是以pair类型来存贮的. 其底层 ...

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

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

最新文章

  1. Mac下的比较器工具DeltaWalker的试用期延长法
  2. send和WSASend区别
  3. GridSearchCV.grid_scores_和mean_validation_score报错
  4. 虚拟机(基于栈还是基于寄存器)之谈
  5. .NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(上)...
  6. Android之Lollipop DevicePolicyManager学习(下)
  7. Nodejs课堂笔记02
  8. 小米又给员工发福利了! 逾3亿港元457人分
  9. linux+cd英文全称,Linux命令英文全称
  10. 程序员面试金典——番外篇之约瑟夫问题2
  11. js基础知识汇总11
  12. java html判断,青岛HTML5入门应怎么判断?
  13. Qt QT_BEGIN_NAMESPACE
  14. HTC VIVE☀️四、Linear Drive与Circular Drive的使用
  15. C#/VB.NET 如何旋转PDF页面
  16. 计算跑步时的热量消耗
  17. 软件开发的流程是怎样的?
  18. Xcode真机调试中There was an internal API error错误解决方法
  19. INF443 Amphi 2: Calculs d‘Illumination
  20. 【JavaSE之JDK8新特性】三万字详文带你了解JDK8新特性

热门文章

  1. [CF475E]Strongly Connected City 2
  2. 网站防止SQL注入方法
  3. Java生成javadoc
  4. Linux vi格式化文件命令
  5. router3 BGP1 基础部分
  6. 牛客 - Dance with a stick(大风车模型)
  7. 美团杯2020 - 半前缀计数(后缀自动机)
  8. CodeForces - 1337D Xenia and Colorful Gems(二分)
  9. HihoCoder - 1445 后缀自动机二·重复旋律5(后缀自动机)
  10. UVA1601The Morning after Halloween 单向加双向bfs