stl map 查找不到返回什么_STL 容器结构和分类
C++主要有两大场景,面向对象编程 OOP 和 泛型编程 GP,二者的主要区别是 OOP 会把数据和方法包装在一起,通过多层的继承关系来实现复杂的功能,而 GP 则会把数据和方法分开来,很少会有继承的关系。
STL 是 c++ 的标准模板库,主要有 容器、分配器、算法、适配器、迭代器和函数对象等组成,设计之初就以 GP 为主,各类之间互相独立,比如容器和算法互相独立,通过迭代器来沟通;又比如各种容器之间并无直接的继承关系(早期)。
容器是 STL 中最被人熟知的一部分,那么容器又是如何分类的呢?
总的来说,容器可以分为序列容器和关联式容器。
序列容器有 array(c++11)、vector、deque、List 和 Forward_List 。
array:定长数组,数组的包装类。
vector:动态数组,满了之后二倍大小扩容。
deque:双向队列。其实现是一个分段式的连续存储,由一个 vector 作为基准, 数组中的元素都是指针, 指向每一个节点,数据存储在每个节点上,每个节点可以认为是一个数组。stack 和 queue 都是受限的 deque ,接口底部都是由 deque 实现,因此有人认为 stack 和 queue 不是容器,而是一种容器适配器 container adapter 。
List:双向循环链表。
Forward_List:单链表。
关联式容器有 set / multiSet、 map / multiMap、 unordered set / multiSet、 unordered-map/multiMap 等。
set / multiSet:红黑树实现,区别在于 set 中的元素是唯一的,multiSet 可以重复插入相同元素,同时不允许迭代器修改 set 中的元素,这一点是通过 const_iterator 实现的。底层是调用了 rbTree 的 unique_insert() 和 equal_insert()方法,这里可以看出,set 也是一种容器适配器。
map / multiMap:也是由红黑树实现,和 set 的区别在于节点有 key/ data 组成,而 set 中的没有 data, 或者说 data 就是 key。类似的是,无法通过迭代器修改元素的 key ,但是可以修改 data。这点是通过在定义节点类型的时候,Pair<const keyType, dataType>,可见节点是一个 pair 类型,key 是常量无法修改。
map 的[key]操作符会查找对应 key 的data,如果没有就会插入 key , 对应的 data 是默认值。因此也可以使用 [] 来插入数据,类似于先查找后 insert 。
unordered set/map :基于哈希表实现,所以元素是无序的。桶子的个数默认是质数,比如53 97,采用链地址来解冲突。如果元素的个数大于桶的个数,就再散列。桶增长的速度类似于vector 的增长方式,2 倍增长,选择距离这个数最近的质数作为新的桶数。 stl 有一个写死的质数列表,增长的方式按照表的内容来增长。
/*prime list*/
上图中有缩进的代表衍生关系,并非继承,而是复合:类的内部有其他类的指针而已,比如 set 内部就有一个 rb_tree 的指针,这样做可以解耦。
stl map 查找不到返回什么_STL 容器结构和分类相关推荐
- C++ STL map 中insert函数返回值问题
当map中的insert函数插入失败后,返回值应该是 **pair<iterator, bool>**型,第二个参数bool值在插入成功时返回true,失败时返回false 那么第一个返回 ...
- C++ STL学习笔记(2) 容器结构与分类
接着学习侯捷老师的C++ STL! 在使用容器的时候,需要明白容器中元素之间在内存里的关系是什么样的,是连续的,还是非连续的. 容器可以分为两类: 1. sequence container , 即序 ...
- C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)
1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...
- C++ STL map的使用和性能分析
1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操 作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 ...
- (Fw)STL map 详解
1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操 作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 ...
- C++ map容器和multimap容器(STL map容器)
目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...
- 【C++】STL map 与 multimap 用法和区别
参考: https://blog.csdn.net/shuzfan/article/details/53115922 https://www.nhooo.com/cpp/cpp-map-swap-fu ...
- STL map 简介
STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...
- JAVA SE学习day_13 :Map 查找表
一.java.util.Map 查找表 Map体现的样子是一个多行两列的表格,其中左列称为key,右列称为value,Map总是根据key获取对应的value.因此我们可以将查询的条件作为key,对应 ...
- C++ STL 常用查找算法
C++ STL 常用查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. ...
最新文章
- 解决Windows7修改hosts时提示:您没有权限在此位置中保存文件
- SAP UI5 未来发展的趋势之一:拥抱 TypeScript
- HTML中小meta的大作用
- sqlserver oracle插件,SQLServer链接服务器至Oracle
- JRebel Idea热更新插件
- java如何画矩形条和填充_java.awt.Graphics 类的哪个方法可绘制填充矩形?
- 剑指offer全书题解 (Python)【更新完毕】
- 如何使用数据质量服务和SQL Server集成服务清除数据
- 埃尔米特(Hermite)插值及其MATLAB程序
- 【知识图谱系列】清华大学基于对比学习的图谱预训练模型GCC
- SIP - pjsip Linux Windows 编译安装
- c语言中正确的常量表达式,C语言常量变量表达式
- 3DES加密算法原理
- VirusTotal智能搜索安卓样本示例
- thymeleaf模板获取markdown数据后,渲染到页面上(showdown.js)
- Apache Druid 总结
- 为什么我不建议编程初学者使用Vim,一张图告诉你
- 领导看了会炸毛的溢出理论
- 微信小程序发布详细步骤
- 看雪2w3w安卓高级研修Frida原理学习
热门文章
- Google提供的超强圆角效果
- 《MySQL必知必会》学习笔记——第八章(用通配符过滤)
- logback 打印日志参考,包含异步打印日志及历史日志压缩
- 什么是反射,为什么要用反射,反射的知识讲解
- Java面试题,成员变量以及成员方法的调用,类和对象的关系,程序详细流程,类和对象栈堆的详细解答
- html页面插歌,怎样在HTML播放器里插入歌曲
- java密码验证代码_java用户名密码验证示例代码分享
- WPF 设置TextBox为空时,背景为文字提示。
- Oracle与MySQL的几点区别
- Android开发之SDCardUtils工具类。java工具详细代码,附源代码。判断SD卡是否挂载等功能...