当前位置: 首页 > 编程日记 > 正文

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

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

遍历

从前往后

元素个数>15000

traversal_begin_16384_highest
traversal_begin_16384_highest

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

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

traversal_begin_16384
traversal_begin_16384

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

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

元素个数<4096

traversal_begin_4096
traversal_begin_4096

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

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

元素个数<1024

traversal_begin_1024_highest
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
traversal_end_16384_highest

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

结论:

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

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

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

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

查找

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

元素个数>15000

find_16384_highest
find_16384_highest

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

最差的是set。

元素个数<1024

find_1024_highest
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

相关文章:

买不到口罩怎么办?Python爬虫帮你时刻盯着自动下单!| 原力计划

作者 | 菜园子哇编辑 | 唐小引来源 | CSDN 博客马上上班了&#xff0c;回来的路上&#xff0c;上班地铁上都是非常急需口罩的。目前也非常难买到正品、发货快的口罩&#xff0c;许多药店都售完了。并且&#xff0c;淘宝上一些新店口罩库存写着非常多&#xff0c;但不发货&#…

GlusterFS下如何修复裂脑文件?(续一)

关于网上一些修复GlusterFS裂脑文件的说明1、Fixing a GlusterFS split-brainhttps://inuits.eu/blog/fixing-glusterfs-split-brain在该文章中&#xff0c;删除无效副本时提供的方法如下&#xff1a;srv02$ sudo find /export/brick1/sdb1/ -samefile /export/brick1/sdb1/tes…

MySQL数据库环境使用全过程

在使用MySQL之前&#xff0c;需要建立数据库的环境来创建数据表&#xff0c;首先我们需要安装该数据库环境&#xff0c;即MySQL。1、下载MySQLMySQL的官方网站是http://www.mysql.org/&#xff0c;如图2-9所示&#xff1a;图2-9 MySQL官方网站当前稳定版本为5.1&#xff0c;我…

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

操作系统是Windows10 64bit&#xff0c;编译器是 Microsoft Virtual Studio Community 10。编译产出是64位测试程序。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 因为加入测量&#xff0c;就会导致误差。我已经尽量将环境影响降低&#xff0c;但是还是难免…

“夸夸机器人”App来了:变身百万粉丝大V,48万人给你的帖子点赞

来源 | mashable译者 | Kolen出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;我在Botnet上的第一条帖子获得了48万个赞。一款全新的社交媒体风格的应用为用户提供了生活在一个奇特网络虚拟世界的机会。在这个世界里&#xff0c;你将拥有数以百万计的粉丝&#xff0c;…

leetcode Reverse Linked List

Reverse a singly linked list 对于这种可以修改值的&#xff0c;把值逆序就可以了。。。。用vector存&#xff0c;然后逆序读。 都忘了指针怎么赋值初始化了。*p&head; 1 /**2 * Definition for singly-linked list.3 * struct ListNode {4 * int val;5 * Lis…

抗击新冠肺炎,如何进行实时动态时序图谱建模与分析?

作者 | 闭雨哲来源 | ThutmoseAI背景介绍新冠肺炎是一种具有最长达24天潜伏期的新型突发性传染疾病&#xff0c;这种特性给疫情防控带来了巨大的挑战&#xff0c;随着感染规模的不断扩增&#xff0c;简单的人为治理已不太奏效&#xff0c;使用“大数据”技术手段来辅助人为治理…

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

相关环境和说明在《C拾趣——STL容器的插入、删除、遍历和查找操作性能对比&#xff08;Windows VirtualStudio&#xff09;——插入》已给出。本文将分析从头部、中间和尾部对各个容器进行删除的性能。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 删除 …

关于服务器启动慢的问题

今天去了家医院的机房&#xff0c;走进去一看&#xff0c;TMD的医院就是有钱&#xff0c;全是光纤和千兆网络环境&#xff0c;全全是思科的三层交换机和路由器&#xff0c;HP的服务器。我们需要安装点东西&#xff0c;登录一台服务器&#xff0c;我一看配置&#xff0c;呵呵&am…

python依赖包exe文件安装问题

2019独角兽企业重金招聘Python工程师标准>>> 在使用python的exe程序安装依赖包的时候&#xff0c;经常会出现类似于下面的错误&#xff1a; python version 2.7 required,which was not found in the registry 可以使用如下代码解决该问题: # # script to register …

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

相关环境和说明在《C拾趣——STL容器的插入、删除、遍历和查找操作性能对比&#xff08;Windows VirtualStudio&#xff09;——插入》已给出。本文将分析各个容器中遍历和查找的性能。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 遍历 从前往后 travers…

技术战“疫”,贾扬清、李飞飞要给程序员直播讲AI技术!

「时势造英雄&#xff0c;英雄亦造时势。」在这场波及全球且看不见硝烟的疫情下&#xff0c;无数英雄日夜奋战&#xff0c;无论是身处一线的医护工作者、政府职能部门、志愿者&#xff0c;还是坚守在家的人民群众&#xff0c;都在尽自己所能&#xff0c;在行动&#xff01;与此…

关于端口映射的一个命令

今天安装一个远程会诊的系统&#xff0c;由于是在不同和的地方&#xff0c;需要在路由器上作下映射&#xff0c;由于是要远程连接对方的服务器&#xff0c;所以要在对方的路由器上设置下Interface fastethernet0/0 Ip address 192.168.1.1 255.255.255.0 Duplex auto Speed aut…

elasticsearch简介

Elasticsearch是 面向文档型数据库&#xff0c;这意味着它存储的是整个对象或者 文档&#xff0c;它不但会存储它们&#xff0c;还会为他们建立索引&#xff0c;这样你就可以搜索他们了。你可以在 Elasticsearch 中索引、搜索、排序和过滤这些文档。不需要成行成列的数据。所以…

C++拾取——使用stl标准库生成等差、等比数列的方法

代码是思想的表达。阅读代码是一个猜测、求证的过程。这个过程非常费脑&#xff0c;所以人们都不喜欢啰啰嗦嗦的表达方式。于是在相同认知水平下&#xff0c;简洁高效的表达是喜闻乐见的。本文将抛砖引玉&#xff0c;通过一些案例讲解如何去简化代码。&#xff08;转载请指明出…

利用NetBIOS名称与其他计算机通信

当某台计算机与网络中的其他计算机通信时&#xff0c;它是如何依据对方的计算机名称来得知其IP地址呢&#xff1f;名称解析的方法有以下几种&#xff1a; 检查NetBIOS名称缓存&#xff08;NetBIOS name cache&#xff09;广播直接向WINS服务器查询何谓NetBIOS名称&#xff1a;如…

编程语言性能实测,Go比Python更胜一筹?

作者 | Pawel Dziubałka, Sebastian Karasiewicz译者 | 泓技出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;互联网上有非常多的精彩代码&#xff0c;它们成了构建各种基础设施的基础。你正在阅读的这个平台同样也在致力于创建出色的代码。尽管普通用户一般不会注意…

mysql备份策略的制定

需要考虑的因素&#xff1a; 1. 数据库是不是都是innoDB引擎表 -》决定备份方式&#xff0c;热备或冷备 2. 数据量大小 -》逻辑备&#xff08;量小&#xff09;或物理备&#xff0c;全量或增量 3. 数据库本地空间是否充足 -》备份到本地或远程 4. 需要多快恢复 -》备份频率 小时…

C++拾取——使用stl标准库实现排序算法及评测

今天看了一篇文章&#xff0c;讲各种语言的优势和劣势。其中一个观点&#xff1a;haskell非常适合写算法&#xff0c;因为使用者不用去关心具体的计算机实现&#xff0c;而只要关注于操作语义。这让它在专心研究算法的人中非常受欢迎。所以很多时候&#xff0c;语言的争论没有太…

几行代码构建全功能的对象检测模型,他是如何做到的?

作者 | Alan Bi 译者 | 武明利&#xff0c;责编 | Carol 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 如今&#xff0c;机器学习和计算机视觉已成为一种热潮。我们都看过关于自动驾驶汽车和面部识别的新闻&#xff0c;可能会想象建立自己的计算机视觉模型有多酷。…

SQL操作全集

SQL操作全集 下列语句部分是Mssql语句&#xff0c;不可以在access中使用。 SQL分类&#xff1a; DDL—数据定义语言(CREATE&#xff0c;ALTER&#xff0c;DROP&#xff0c;DECLARE) DML—数据操纵语言(SELECT&#xff0c;DELETE&#xff0c;UPDATE&#xff0c;INSERT) DCL—数据…

css3媒体查询实现网站响应式布局

响应式建筑设计、响应式家具设计、响应式办公设计&#xff0c;这些词可能是已有的专业名词&#xff0c;也可能是我自己想出来的一些名词。因为在生活中&#xff0c;我们常常会见到很多让人惊叹的设计&#xff0c;为什么同一套东西经过不同的方式变化之后会给人不同的使用感受和…

流行于机器学习竞赛的Boosting,这篇文章讲的非常全了

作者 | AISHWARYA SINGH译者 | 武明利&#xff0c;责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;你能说出至少两种机器学习中的 Boosting 吗&#xff1f;Boosting 已经存在了很多年&#xff0c;然而直到最近它们才成为机器学习社区的主流。那么&#x…

并行计算——OpenMP加速矩阵相乘

OpenMP是一套基于共享内存方式的多线程并发编程库。第一次接触它大概在半年前&#xff0c;也就是研究cuda编程的那段时间。OpenMP产生的线程运行于CPU上&#xff0c;这和cuda不同。由于GPU的cuda核心非常多&#xff0c;可以进行大量的并行计算&#xff0c;所以我们更多的谈论的…

JavaScript继承详解(四)

文章截图 - 更好的排版 在本章中&#xff0c;我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript。 Crockford是JavaScript开发社区最知名的权威&#xff0c;是JSON、JSLint、JSMin和ADSafe之父&#xff0c;是《JavaScript: The …

C语言:在屏幕上输出信息

#include<stdio.h>int main(){printf ("This is a C program.\n");printf("welcome to bit\n");return 0;}结果&#xff1a;This is a C program.welcome to bitPress any key to continue转载于:https://blog.51cto.com/yaoyaolx/1715542

Colly源码解析——框架

Colly是一个使用golang实现的数据抓取框架&#xff0c;我们可以使用它快速搭建类似网络爬虫这样的应用。本文我们将剖析其源码&#xff0c;以探析其中奥秘。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; Collector是Colly的核心结构体&#xff0c;其中包含了…

未经任何测试的源代码开放

未经任何测试的源代码开放 http://files.cnblogs.com/TextEditor/TextBoxEx.rar 这个代码只是一个Demo. 请将一个Vb.net的代码放在C盘下面&#xff0c;并且改名为Test.txt&#xff0c;然后使用菜单的Open来打开文件。 有任何问题&#xff0c;请在这里留言。 C#的上色还没有完成…

助力企业抗疫,360金融推出免费AI语音机器人

复工潮来临之际&#xff0c;为帮助各大企业进行高效的内部防疫宣传、员工行程信息收集以及快速生成公司内部防疫排班表&#xff0c;360金融针对复工企业的需求痛点推出了AI语音机器人&#xff0c;以助力企业更高效的防疫、抗疫。 针对复工企业的需求痛点&#xff0c;360金融人…

实现strncat

函数原型char *strncat(char *front,char *back,size_t count)参数说明back为源字符串&#xff0c;front为目的字符串&#xff0c;count为指定的back中的前count个字符。 所在库名#include <string.h>函数功能把back所指字符串的前count个字符添加到front结尾处&a…