当想到排序时,第一个想到的是关联容器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替代关联容器相关推荐

  1. C++primer第十一章 关联容器 11.1使用关联容器 11.2 关联容器概述

    关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映 ...

  2. 《C++ Primer 5th》笔记(11 / 19):关联容器

    文章目录 使用关联容器 使用map 使用set 关联容器概述 定义关联容器 初始化multimap 或 multiset 关键字类型的要求 有序容器的关键字类型 使用关键字类型的比较函数 pair类型 ...

  3. C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器

    11.3关联容器操作 除了表9.2(第295页)中列出的类型,关联容器还定义了表11.3中列出的类型.这些类型表示容器关键字和值的类型. 对于set类型,key_type和value type是一样的 ...

  4. 《C++ Primer 第5版》-11.2关联容器概述-康奈尔笔记

    引入:2018年10月看<C++ Primer 第5版>而写的简单笔记 11.2.1定义关联容器 关联容器概述 定义关联容器 初始化multimap或multiset map<str ...

  5. 【C++ Primer 第11章】2. 关联容器操作

    练习答案 一.访问元素 关联容器额外类型别名  key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型,只 适用于map mapped_type 对于set,与key_ ...

  6. 汇总|C++常见知识点总结,涉及文本输出、排序、生成随机数、异常处理、关联容器、printf重定向、sprintf用法、cout重定向

    文章目录 一 将程序运行结果输出到txt文本文件中 二 排序算法 三 生成随机数 四 异常处理 六 关于GitHub上zip与tar.gz的区别 七 容器中查找最大值所在的位置 八 C++中关联容器的 ...

  7. C++ primer 第11章 关联容器

    文章目录 使用关联容器 map示例 关联容器概述 定义关联容器 关联容器值初始化 multimap和multiset 关键字类型的要求 pair类型 pair上的操作 关联容器操作 关联容器额外的类型 ...

  8. C++ 11 特性:关联容器map、set的使用

    参考文献<C++ Primer> 一.关联容器概述 1.1 关联容器的概念 关联容器支持高效的查找与访问,主要的关联容器为map与set这两个.其中map主要提供的是键-值的操作,比如字典 ...

  9. C++ Primer 5th笔记(chap 11)关联容器---无序容器

    无序关联容器 unordered associative container •unordered_map •unordered_set •unordered_multimap •unordered_ ...

最新文章

  1. 图的两种存储方式---邻接矩阵和邻接表
  2. win32汇编--加载位图(bmp)资源
  3. 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号
  4. Oracle-数据泵expdp/impdp实操
  5. codevs1316 文化之旅
  6. Spring来装配组件
  7. LiveVideoStack线上交流分享 ( 三 ) —— 实时视频通信质量评价及寻找视频质量甜点的方法...
  8. Github远程仓库管理
  9. 操作系统锁的实现方法有哪几种_一文带你彻底了解同步和锁的本质
  10. 网游服务器通信架构设计
  11. 【收藏】一千行 MySQL 学习笔记
  12. 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
  13. 1_绪论 分布式机器学习
  14. 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
  15. 深度增强学习:走向通用人工智能之路
  16. Revit:一般建筑的主要结构汇总和构建参数化族方法
  17. 非root用户执行程序---sudo的使用
  18. 中国地理信息产业人才分布地图
  19. ECharts x,y轴分别添加自定义的滚动条
  20. CSP-J信息学奥赛考试大纲(入门级)

热门文章

  1. SQL Server学习之路(五):“增删改查”之“改”
  2. SpringMVC-Controller怎么直接在页面上传递参数
  3. highcharts总结
  4. iOS-NSThread编程详解
  5. 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人
  6. LeetCode Shell 192. 统计词频
  7. Python设计模式之外观模式实例讲解
  8. 13.2.9 中间件
  9. 【机器视觉】 reset_fuzzy_measure算子
  10. 【机器视觉】 dev_set_check算子