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 运算,以生成用于遍历整个
容器的迭代器。