您的位置:首页 > 编程语言 > C语言/C++

C++容器(二):关联容器简介

2015-10-01 21:06 204 查看
关联容器(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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: