C++关联容器

1、关联容器定义

关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map set。map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。

set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用 multimap 或 multiset,这两种类型允许多个元素拥有相同的键。

关联容器不提供front、 push_front、 pop_front、back、push_back 以及 pop_back 操作,不提供 assign 函数,支持clear 和 erase 操作,但关联容器的 erase 运算返回void 类型。支持关于容器大小的操作。但 resize 函数不能用于关联容器。

“容器元素根据键的次序排列”在迭代遍历关联容器时,我们可确保按键的顺序的访问元素,而与元素在容器中的存放位置完全无关。

​2、关联容器map构造函数


键类型的约束:键类型必须定义 < 操作符,而且该操作符应能“正确地工作”。

3、map的插入操作

(1)使用下标

使用下标访问 map 对象​,会先在map中查找对应键值的元素如果不存在则在map中添加此元素,用下标访问不存在的元素将导致在 map 容器中添加一个新元素,它的键即为该下标值。

(2)insert


​​insert 的返回值:含有一个或一对迭代器形参的 insert函数版本并不说明是否有或有多少个元素插入到容器中。但是,带有一个键-值 pair 形参的 insert 版本将返回一个值:包含一个迭代器和一个 bool 值的 pair 对象,其中迭代器指向 map 中具有相应键的元素,而 bool 值则表示是否插入了该元素。如果该键已在容器中,则其关联的值保持不变,返回的 bool 值为 true。表示已经插入map

4、map的查找

(1)使用下标

使用键值key作为下标可以访问map但是使用下标存在一个很危险的副作用:如果该键不在 map 容器中,那么下标操作会插入一个具有该键的新元素。

map 容器提供了两个操作:count 和 find,用于检查某个键是否存在而不会插入该键。

count返回 m 中 k 的出现次数​。

find如果 m 容器中存在按 k 索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端的end迭代器

​5、map的删除


​6、map遍历

与其他容器一样,map 同样提供 begin 和 end 运算,以生成用于遍历整个

容器的迭代器。

posted @ 2016-11-27 11:34  luizp  阅读(134)  评论(0编辑  收藏  举报