11.考虑用排序的vector替代关联容器
当想到排序时,第一个想到的是关联容器set、muliset、map、multimap, 它们的底层实现为红黑树,查找的时间复杂度为O(log(n))。也可以使用哈希容器unordered_set、unorderd_multiset、unordered_map、unordered_multimap,它们的底层实现为哈希表,查找的时间复杂度为常数时间复杂度。
关联容器使用的红黑树,优化了插入、查找、删除等操作,使它们均为对数时间复杂度。所以对于各种情况下的操作,它的查找性能都会比较稳定。
但是,对于容器,如果对其进行的操作固定,例如明显分为三个阶段:
设置阶段:创建一个新的数据结构,并插入大量元素。在这个阶段,几乎所有操作都是插入或者删除操作,很少或几乎没有查找操作。
查找阶段:查询该数据结构以找到特定的信息。在这个阶段,几乎所有操作都是查找操作,很少或几乎没有插入或者删除操作。
重组阶段: 改变该数据结构的内容,或许是删除所有的当前数据,再插入新的数据。
这种情况下使用vector作为容器来存储std::pair可能查找效果会更好。当然,前提时,先要对vector容器进行排序。
这是因为,排序的vector容器和关联容器,查找都是使用二分查找法。但是由于关联容器底层的红黑树,除了保存原始数据本身外,至少还包括2个指针,一个指向前驱、一个指向后继。因此,同样大小的内存,存放的vector数据要比关联容器多,查找的效率就相对较高。
当然,如果对于容器的操作无法预测,例如插入、查找、删除交替进行。使用vector将面临大量的内存分配、对象移动等,这将消耗大量的时间,无疑是非常不可取的。因此,选用什么样的容器,必须结合自身的需求。没有哪个容器是放置四海而皆准的。
11.考虑用排序的vector替代关联容器相关推荐
- C++primer第十一章 关联容器 11.1使用关联容器 11.2 关联容器概述
关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映 ...
- 《C++ Primer 5th》笔记(11 / 19):关联容器
文章目录 使用关联容器 使用map 使用set 关联容器概述 定义关联容器 初始化multimap 或 multiset 关键字类型的要求 有序容器的关键字类型 使用关键字类型的比较函数 pair类型 ...
- C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器
11.3关联容器操作 除了表9.2(第295页)中列出的类型,关联容器还定义了表11.3中列出的类型.这些类型表示容器关键字和值的类型. 对于set类型,key_type和value type是一样的 ...
- 《C++ Primer 第5版》-11.2关联容器概述-康奈尔笔记
引入:2018年10月看<C++ Primer 第5版>而写的简单笔记 11.2.1定义关联容器 关联容器概述 定义关联容器 初始化multimap或multiset map<str ...
- 【C++ Primer 第11章】2. 关联容器操作
练习答案 一.访问元素 关联容器额外类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型,只 适用于map mapped_type 对于set,与key_ ...
- 汇总|C++常见知识点总结,涉及文本输出、排序、生成随机数、异常处理、关联容器、printf重定向、sprintf用法、cout重定向
文章目录 一 将程序运行结果输出到txt文本文件中 二 排序算法 三 生成随机数 四 异常处理 六 关于GitHub上zip与tar.gz的区别 七 容器中查找最大值所在的位置 八 C++中关联容器的 ...
- C++ primer 第11章 关联容器
文章目录 使用关联容器 map示例 关联容器概述 定义关联容器 关联容器值初始化 multimap和multiset 关键字类型的要求 pair类型 pair上的操作 关联容器操作 关联容器额外的类型 ...
- C++ 11 特性:关联容器map、set的使用
参考文献<C++ Primer> 一.关联容器概述 1.1 关联容器的概念 关联容器支持高效的查找与访问,主要的关联容器为map与set这两个.其中map主要提供的是键-值的操作,比如字典 ...
- C++ Primer 5th笔记(chap 11)关联容器---无序容器
无序关联容器 unordered associative container •unordered_map •unordered_set •unordered_multimap •unordered_ ...
最新文章
- 图的两种存储方式---邻接矩阵和邻接表
- win32汇编--加载位图(bmp)资源
- 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号
- Oracle-数据泵expdp/impdp实操
- codevs1316 文化之旅
- Spring来装配组件
- LiveVideoStack线上交流分享 ( 三 ) —— 实时视频通信质量评价及寻找视频质量甜点的方法...
- Github远程仓库管理
- 操作系统锁的实现方法有哪几种_一文带你彻底了解同步和锁的本质
- 网游服务器通信架构设计
- 【收藏】一千行 MySQL 学习笔记
- 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
- 1_绪论 分布式机器学习
- 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
- 深度增强学习:走向通用人工智能之路
- Revit:一般建筑的主要结构汇总和构建参数化族方法
- 非root用户执行程序---sudo的使用
- 中国地理信息产业人才分布地图
- ECharts x,y轴分别添加自定义的滚动条
- CSP-J信息学奥赛考试大纲(入门级)
热门文章
- SQL Server学习之路(五):“增删改查”之“改”
- SpringMVC-Controller怎么直接在页面上传递参数
- highcharts总结
- iOS-NSThread编程详解
- 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人
- LeetCode Shell 192. 统计词频
- Python设计模式之外观模式实例讲解
- 13.2.9 中间件
- 【机器视觉】 reset_fuzzy_measure算子
- 【机器视觉】 dev_set_check算子