相关环境和说明在《C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入》已给出。本文将分析各个容器中遍历和查找的性能。(转载请指明出于breaksoftware的csdn博客)

遍历

从前往后

元素个数>15000

traversal_begin_16384_highest

表现最差的是unordered_multiset。其在遍历到1000个左右的元素时发生较高的延时操作,然后又稳定下来。

除了这个容器,再看下其他容器的表现。

traversal_begin_16384

可以看出这些容器的遍历效率差距不大。最快的vector比倒数第二慢的unorderedset快50%左右。

vector容器在元素个数大于8000左右开始,效率优于list。之前list是最优的。

元素个数<4096

traversal_begin_4096

因为unordered_multiset效率还是很差,所以上图例没有将其列出。

deque在最开始时,发了高耗时的操作。之后它的效率还是可以的。

元素个数<1024

traversal_begin_1024_highest

unordered_multiset在元素个数超过200左右时,效率将差于其他容器。

deque在元素个数低于200左右时,效率低于所有容器。

结果对比:

元素个数大于8000左右时,vector效率是最好的。

元素个数小于8000左右时,list效率是最好的。

元素个数大于200左右时,unordered_multiset效率是最差的。

元素个数小于200左右时,deque效率是最差的。主要原因是开始时一次高耗时操作,但是之后每次操作耗时均不多(线的变化率)。

从后往前

支持从后向前遍历的容器并不多,只有:vector、deque、list、set、map、multiset和multimap。

元素个数>15000

traversal_end_16384_highest

vector效率最高,其次是deque和list。

结论:

vector在各个方向的遍历效率均比较优秀。

list在从前往后遍历时比deque优秀。

deque在从后向前遍历时比list优秀。

关联容器的遍历效率没有非关联容器高。

查找

因为非关联容器的查找只能通过遍历,其效率和关联容器的查找没法比。所以我们只比较关联容器

元素个数>15000

find_16384_highest

最优的是unordered_multiset,其次是unordered_map和unordered_set。

最差的是set。

元素个数<1024

find_1024_highest

元素个数小于600左右时,unordered_multimap是最差的。

元素个数大于600左右时,set是最差的。

结果对比:

unordered_multiset的效率一直是最好的。

set在元素较多时效率是最差的,其他时候也很差。

结论:

unordered系列容器比ordered系列容器效率高。

ordered系列容器中,map系列比set系列对应的容器效率高。比如map比set优,multimap比multiset优。

set效率最差。

unordered_multiset最优。

文中图例可从以下地址获取:https://github.com/f304646673/stl_perf/tree/master/linux

C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找相关推荐

  1. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...

  2. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...

  3. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除的性能.(转载请指明出 ...

  4. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入

    操作系统是Windows10 64bit,编译器是 Microsoft Virtual Studio Community 10.编译产出是64位测试程序.(转载请指明出于breaksoftware的c ...

  5. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入

    操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0.编译产出是64位测试程序.(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差 ...

  6. C++中STL容器利用迭代器删除元素小结

    C++中STL容器利用迭代器删除元素小结 在STL容器中删除元素,容易导致迭代器失效,故应该清楚明白其用法,现在总结一下. 转载自:https://blog.csdn.net/yf_li123/art ...

  7. C++ STL容器元素正确删除

    一.容器与迭代器 1.1 STL容器 容器是用来管理一大群元素的,为了适应不同需要,STL提供了不同的容器. 在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的 ...

  8. C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——插入(精简易懂版,句句干货)

    文中将测试vector.list.forward_list.deque.set(multiset).unordered_set(unordered_multiset).map(multimap)和un ...

  9. C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——删除(精简易懂版,句句干货)

    删除 头部删除 vector性能是最差的 ,set和map的性能次之. deque和forward_list性能是最优的.(差距不是十分明显) 中间删除 vector的性能最差, 效率最好的是list ...

最新文章

  1. Matlab与机器学习-- 数据的归一化
  2. 天津商业大学计算机科学与技术分数线,天津商业大学录取分数线2021是多少分(附历年录取分数线)...
  3. python中匿名函数的作用_Python 中的匿名函数,你会用吗
  4. mongo c#驱动介绍操作
  5. Redis常见面试题总结
  6. info replication
  7. [Unity3d]定义自己的鼠标
  8. [C++ STL] 各容器简单介绍
  9. AI算法连载17:统计之半监督学习
  10. Spring MVC Hibernate MySQL集成CRUD示例教程
  11. 软件架构(10)---java资深架构师分布式技术分享
  12. 命令窗口ping oracle,Oracle中tnsping命令解析
  13. Simple:Press
  14. linux(Centos7)安装elasticsearch6.2.2
  15. excel表格打开是乱码怎么办?
  16. Python大数据分析(一):认识大数据
  17. 机器学习数学知识第一期复习指南
  18. 胧月初音未来计算机,胧月(流星P所作歌曲《胧月》)_百度百科
  19. RRT、RRTConnect、RRT*——Matlab算法
  20. 扯ruan蛋的房价,恶心死了我

热门文章

  1. 安卓网页广告拦截_拦截烦人的网页广告,增加上网体验
  2. C++:随笔4--对象
  3. 霍夫变换(Hough Transform):霍夫变化在图像处理以及点云处理中的直线检测应用
  4. 一次失败的Pytorch模型量化尝试
  5. mxnet speech_recognition踩坑记
  6. C语言中的struct结构体对齐问题
  7. OpenCV图像缩放插值之BiCubic双三次插值
  8. ceres实现的pnp解算后的位姿优化代码详解
  9. PCL点云特征描述与提取(2)
  10. 【力扣网练习题】实现 strStr()