2019独角兽企业重金招聘Python工程师标准>>>

map 是有序的 内部通常是红黑树实现

unordered_map 是无序的 内部是hash

所以unordered_map  的插入查找删除速度比map快几倍,对数据的顺序没有要求时尽量用unordered_map

Note:

  1. erase的时候 为了保证 迭代器的正确性要么erase(it++); 要么 it=erase(it)

  2. 使用for(const auto &x:mapXX) 遍历的时候 如果循环内存执行了删除插入操作 那么将不会保证结果的正确性

  3. 对于某一个迭代器  之后执行删除插入操作

unordered_map<int, string> map2;map2.insert(pair<int, string>(1, "ARTJSAJSTJ"));map2.insert(pair<int, string>(2, "BHWTJUWRTHJSRTJ"));map2.insert(make_pair(3, "CHRHEWHEHJT"));map2.insert(make_pair(4, "CHRHEWHEHJt"));auto it = map2.begin();auto itt1 = map2.find(3);map2.erase(it);cout << (*itt1).second.c_str()<<endl;//unorder_map   itt1不会失效map<int, string> map1;map1.insert(pair<int, string>(1, "ARTJSAJSTJ"));map1.insert(pair<int, string>(2, "BHWTJUWRTHJSRTJ"));map1.insert(make_pair(3, "CHRHEWHEHJT"));map1.insert(make_pair(4, "CHRHEWHEHJt"));auto it1 = map1.begin();auto itt = map1.find(3);map1.erase(it1);cout << (*itt).second.c_str();//map 也不失效

删除 插入均不会失效 ,对于这个结论,我比较怀疑,可能是测试用例问题

不过从http://en.cppreference.com/w/cpp/container/map/erase  相关找到了这个疑惑 结论如下:

erase,删除

1.对于unordered_map erase 只对 参数的迭代器会失效,其他迭代器 没影响

原话References and iterators to the erased elements are invalidated. Other iterators and references are not invalidated

2.对于map 一样

原话References and iterators to the erased elements are invalidated. Other references and iterators are not affected.

insert,插入

  1. 对于unorder_map 如果插入导致了 rehashing 那么所有迭代器会失效,否则不会失效。引用不会失效

rehashing只会发生在 插入的新元素 数量 比 n max_load_factor()*bucket_count(). 大

原话If rehashing occurs due to the insertion, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is higher than max_load_factor()*bucket_count().

2.对于map  都不会失效

原话No iterators or references are invalidated.

总结:

插入:unordered_map 可能失效,map不受影响

删除 :被删除的迭代器失效 其他不受影响

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/653899

map和unordered_map相关推荐

  1. 原 c++中map与unordered_map的区别

    c++中map与unordered_map的区别 头文件 map: #include < map > unordered_map: #include < unordered_map ...

  2. C++语言map和unordered_map的下标操作

    C++语言map和unordered_map的下标操作 C++语言map和unordered_map的下标操作

  3. STL系列:map和unordered_map

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

  4. set/multiset/unordered_set和map/multimap/unordered_map基础汇总

    引言 在STL中,有两种很常见的关联容器,分别是set和map,序列容器的元素是按照在容器中的位置来顺序保存和访问的,而关联容器的元素是按关键元素来保存和访问的.所以关联容器经常用在关键字的查找中,效 ...

  5. map与unordered_map

    时间复杂度:   map unordered_map Ordering increasing order no  order Implementation Self balancing BST Has ...

  6. c++查找pair,使用map,unordered_map,vector

    map和unordered_map都可以简单的实现,因为本身就是键值对,而且都提供find方法,相对来说unordered_map比map略快. vector使用find_if函数,并且最简单的用法就 ...

  7. map 与 unordered_map

    两者效率对比: #include <iostream> #include <string> #include <map> #include <unordere ...

  8. C++ set与map、unordered_map、unordered_set与哈希表

    哈希表           表: 存储数据 key –> value; 用表来存储数据结构的困难: 查找困难.一个一个key去比较去查找,效率不高.因此有了Hash算法加快查找; 将字符串的ke ...

  9. C++ map和unordered_map详解

    C++ map和unordered_map详解 官方文档链接 概述   C++中map和unordered_map提供的是一种键值对容器,在实际开发中会经常用到,它跟Python的字典很类似,所有的数 ...

  10. map和unordered_map的用法和区别

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

最新文章

  1. matplotlib.pyplot.plot 用法详解
  2. PAT C++常用函数(持续更新)
  3. 我的中年危机来得很自然
  4. oracle 如何数组变成表,Oracle从零开始19——表的管理09——嵌套表和可变数组
  5. 习题6-5 使用函数验证哥德巴赫猜想 (20 分)
  6. Docker精华问答 | 如何让一个容器连接两个网络?
  7. 统计方格区域内正方形和长方形的个数(洛谷P1548题题解,Java语言描述)
  8. 计算机应用基础1,计算机应用基础1
  9. Android studio 配置使用maven
  10. Error creating bean with name ‘fastJsonpResponseBodyAdvice‘ defined in URL xxx
  11. shell类型、添加PATH环境变量、.bashrc、.profile、/etc/profile、/etc/environment
  12. 蓝桥杯省赛真题C++java2013-2019
  13. ios- uitextview的详细使用方法
  14. edius多机位多轨编辑
  15. jQuery,JS实现自定义鼠标右键菜单
  16. Blender 建模
  17. mvn命令运行springboot程序报错No compiler is provided in this environment. Perhaps you are runningon a JRE
  18. EOS Error 3090003: provided keys, permissions, and delays do not satisfy declared authoriz
  19. form表单内子元素组件按钮button事件冲突 - Vue
  20. Apache Kafka 在 360 的深度实践

热门文章

  1. 【论文阅读】Pancreas Segmentation in Abdominal CT Scan: A Coarse-to-Fine Approach 2016
  2. java timer 序列化_Java中的定时器Timer使用示例代码
  3. python朴素贝叶斯分类的手写数字识别_关于利用机器学习进行手写数字的的识别...
  4. jmeter 登录用户并发压力测试案例_用jmeter进行多用户并发压力测试 [转]
  5. android slidingmenu 兼容低版本,Android SlidingMenu的使用详解
  6. matlab符号运算实验,数学实验6--Matlab符号运算.pptx
  7. Flutter 进阶篇-所有知识点架构
  8. 多并发编程基础 之进程 Process
  9. D - Send a Table (UVA - 10820)
  10. Java加密与解密笔记(二) 对称加密