C++容器(二):关联容器简介
关联容器(associative container)与顺序容器的本质区别在于:关联容器通过键(Key
)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。虽然,关联容器的大部分行为与顺序容器相同,但其独特之处在于支持键的使用。
关联容器支持通过键来高效地查找和读取元素。两个基本的关联容器类型是map
和set
。map
的元素以键-值(key-value)对的形式组织:键用作元素在map
中的索引,而值则表示所存储和读取的元素。set
仅含一个键,并有效地支持关于某个键是否存在的查询。
类型 | 含义 |
---|---|
map |
关联数组:元素通过键来存取和读取 |
set |
大小可变的集合,支持通过键实现的快速读取 |
multimap |
支持同一个键多次出现的map 类型 |
multiset |
支持同一个键多次出现的set 类型 |
一般来说,如果希望有效的存储不同值的集合,那么set
容器比较合适,而map
容器则更适用于需要存储(乃至修改)每个键所关联值的情况。在做某种文本处理时,可使用set
保存要忽略的单词。而字典则是map
的一种很好的应用:单词本身是键,而它的解释说明则是值。
map
和set
类型的对象所包含的元素都具有不同的键,不允许同一个键添加第二个元素。如果一个键必须对应多个实例,则需要使用multimap
和multiset
类型。
关联容器共享大部分—但并非全部—的顺序容器操作。关联容器不提供front
,push_front
,back
,push_back
和pop_back
操作。
总结来说,顺序容器与关联容器公共的操作包括以下几种:
- 三种构造函数:
C<T> c; // creates an empty container
// c2 must be same type as c1
C<T> c1(c2); // copies elements from c2 to c1
// b and e are iterators denoting a sequence
C<T> c(b, e); // copies elements from the sequence into c
关联容器不能通过容器的大小来定义。
关系运算(例如
==
,<
,>
等)。begin
,end
,rbegin
和rend
操作。类型别名(typedef)。 注意,对于
map
容器,value_type
并非元素的类型,而是描述键及其关联值类型的pair
类型。对于这一点将在map
类型的介绍中讲解。swap
和赋值操作。但是关联容器不提供assign
函数。clear
和erase
操作。但是关联容器的erase
运算返回void
类型。关于容器大小的操作。但
resize
函数不能用于关联容器。
参考文献:
- C++ Primer中文版(第四版)》,Stanley B.Lippman et al. 著, 人民邮电出版社,2013。
C++容器(二):关联容器简介的更多相关文章
- C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型, ...
- C++ STL 顺序容器--list + 关联容器
list 双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效, 删除元素时,除了指向当前被删元素的迭代器 ...
- stl中顺序性容器,关联容器两者粗略解释
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- C++之容器(关联容器)
关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...
- STL之关联容器---set, mutilset, map, mutilmap
STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutils ...
- C++关联容器知识总结
C++的容器类型可以分为顺序容器和关联容器两大类.顺序容器的知识可以参看我上篇的随笔<C++顺序容器知识总结>.关联容器支持通过键值来高效的查找和读取元素,这是它和顺序容器最大的区别.两种 ...
- c++11の关联容器
一.关联容器 C++的容器类型可以分为顺序容器和关联容器两大类.对于关联容器,主要有map和set,对于这两种,根据不同的维度,衍生出了8种容器 map ...
- C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器
STL实践与分析 --引言.pair类型.关联容器 引言: 关联容器与顺序容器的本质差别在于:关联容器通过键[key]来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序的存取元素. ma ...
随机推荐
- HDU 2256 Problem of Precision( 矩阵快速幂 )
链接:传送门 题意:求式子的值,并向下取整 思路: 然后使用矩阵快速幂进行求解 balabala:这道题主要是怎么将目标公式进行化简,化简到一个可以使用现有知识进行解决的一个过程!菜的扣脚...... ...
- Thunder9(迅雷9)去掉右侧浏览器广告的方法
1.打开文件夹C:\Program Files (x86)\Thunder Network\Thunder9\Program\TBC 2.找到 ThunderBrowser.exe 3.重命名为任意名 ...
- 题解 CF821D 【Okabe and City】
其实,这道题不用long long也能AC. 题意是给你一个矩阵,有一些格子被点亮有一些没有,每一次只能在被点亮的格子上面走. 然后你每一次都可以选择点亮一行或一排(非永久),现在问你最少点多少次可以 ...
- linux部分常用命令
linux的命令挺多的,下面是我常用的,其实也不可能在敲代码的时候把这个博客拿出来对着写,就是想记录一下,刚开始都觉得不好记,多敲几遍就记住了!!! 创建文件夹:mkdir filename 删除当前 ...
- 关于Segmentation fault错误
今天敲代码时候出现了Segmentation fault,在网上查了一些资料,基本上的原因是.非法的内存訪问. 比如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法 ...
- map和multimap映射容器
map容器 map所处理的数据与数据库表具有键值的记录非常相似,在键值与映射数据之间,建立一个数学上的映射关系.map容器的数据结构仍然採用红黑树进行管理.插入的元素键值不同意反复,所使用的结点元素的 ...
- python学习之--安装IDE(eclipse+pydev)
First steps download eclipse url:http://www.eclipse.org/downloads/ select Help -> Install New Sof ...
- Git-删除本地文件夹的repository(本地仓库)
安装git软件后.有些文件夹里会出现带有?的图标,右键菜单上会有"Git-Sync"或者"Git-Commit"等命令:正常的应该是"Git-Clon ...
- 外面的wifi非常精彩,外面的wifi非常不安
星期一果然非常忙,看到安卓漏洞还是午休的时候.可能我们都习惯了.我们的信息安全一向难以得到保障.对于我来说,可能都无所谓了.可是作为用户之中的一个,我们也不能太安分,该须要的保障还是得维护. 本来.我 ...
- 解决Myeclipse在调试(debug)时无法显示变量值问题
解决Myeclipse在调试(debug)时无法显示变量值问题 突然发现myeclipse在调试时当鼠标放在变量上面时无法显示变量值了 ctrl+shift+D居然提示cannot be resolv ...