C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找
相关环境和说明在《C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入》已给出。本文将分析各个容器中遍历和查找的性能。(转载请指明出于breaksoftware的csdn博客)
遍历
从前往后
元素个数>15000
表现最差的是unordered_multiset。其在遍历到1000个左右的元素时发生较高的延时操作,然后又稳定下来。
除了这个容器,再看下其他容器的表现。
可以看出这些容器的遍历效率差距不大。最快的vector比倒数第二慢的unorderedset快50%左右。
vector容器在元素个数大于8000左右开始,效率优于list。之前list是最优的。
元素个数<4096
因为unordered_multiset效率还是很差,所以上图例没有将其列出。
deque在最开始时,发了高耗时的操作。之后它的效率还是可以的。
元素个数<1024
unordered_multiset在元素个数超过200左右时,效率将差于其他容器。
deque在元素个数低于200左右时,效率低于所有容器。
结果对比:
元素个数大于8000左右时,vector效率是最好的。
元素个数小于8000左右时,list效率是最好的。
元素个数大于200左右时,unordered_multiset效率是最差的。
元素个数小于200左右时,deque效率是最差的。主要原因是开始时一次高耗时操作,但是之后每次操作耗时均不多(线的变化率)。
从后往前
支持从后向前遍历的容器并不多,只有:vector、deque、list、set、map、multiset和multimap。
元素个数>15000
vector效率最高,其次是deque和list。
结论:
vector在各个方向的遍历效率均比较优秀。
list在从前往后遍历时比deque优秀。
deque在从后向前遍历时比list优秀。
关联容器的遍历效率没有非关联容器高。
查找
因为非关联容器的查找只能通过遍历,其效率和关联容器的查找没法比。所以我们只比较关联容器
元素个数>15000
最优的是unordered_multiset,其次是unordered_map和unordered_set。
最差的是set。
元素个数<1024
元素个数小于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++)——遍历和查找相关推荐
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除的性能.(转载请指明出 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入
操作系统是Windows10 64bit,编译器是 Microsoft Virtual Studio Community 10.编译产出是64位测试程序.(转载请指明出于breaksoftware的c ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0.编译产出是64位测试程序.(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差 ...
- C++中STL容器利用迭代器删除元素小结
C++中STL容器利用迭代器删除元素小结 在STL容器中删除元素,容易导致迭代器失效,故应该清楚明白其用法,现在总结一下. 转载自:https://blog.csdn.net/yf_li123/art ...
- C++ STL容器元素正确删除
一.容器与迭代器 1.1 STL容器 容器是用来管理一大群元素的,为了适应不同需要,STL提供了不同的容器. 在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的 ...
- C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——插入(精简易懂版,句句干货)
文中将测试vector.list.forward_list.deque.set(multiset).unordered_set(unordered_multiset).map(multimap)和un ...
- C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——删除(精简易懂版,句句干货)
删除 头部删除 vector性能是最差的 ,set和map的性能次之. deque和forward_list性能是最优的.(差距不是十分明显) 中间删除 vector的性能最差, 效率最好的是list ...
最新文章
- Matlab与机器学习-- 数据的归一化
- 天津商业大学计算机科学与技术分数线,天津商业大学录取分数线2021是多少分(附历年录取分数线)...
- python中匿名函数的作用_Python 中的匿名函数,你会用吗
- mongo c#驱动介绍操作
- Redis常见面试题总结
- info replication
- [Unity3d]定义自己的鼠标
- [C++ STL] 各容器简单介绍
- AI算法连载17:统计之半监督学习
- Spring MVC Hibernate MySQL集成CRUD示例教程
- 软件架构(10)---java资深架构师分布式技术分享
- 命令窗口ping oracle,Oracle中tnsping命令解析
- Simple:Press
- linux(Centos7)安装elasticsearch6.2.2
- excel表格打开是乱码怎么办?
- Python大数据分析(一):认识大数据
- 机器学习数学知识第一期复习指南
- 胧月初音未来计算机,胧月(流星P所作歌曲《胧月》)_百度百科
- RRT、RRTConnect、RRT*——Matlab算法
- 扯ruan蛋的房价,恶心死了我