Table of Contents generated with DocToc
map和set是两个基本的关联容器。map以键-值的形式组织,键用作索引,值表示所存储和读取的数据。set仅包含一个键,并有效支持关于某个键是否存在的查询。
set和map包含的元素都具有不同的键,不允许为同一个键添加第二个元素。如需要,可以使用multimap和multiset。
pair
类型在utility
头文件中定义。
pair
类的数据成员是公有的,分别为first
和second
。
关联容器共享大部分的顺序容器操作,但不包括front、push_front、 pop_front、 back、 push_back、 pop_back。
关联容器不能通过容器大小来定义。
容器元素按照键的次序来排列。
要使用map,必须包含map头文件,定义map对象时,必须分别指明键和值的类型,在实际应用中,键类型必须定义<操作。
用作索引的键的类型(string):map<k, v>::key_value。
键所关联的值的类型(int):map<k, v>::mapped_value。
一个pair类型:map<k, v>::value_type。
map迭代器进行解引用时产生pair类型的对象。
给map添加元素:insert,或者下标取元素,然后赋值。
Attention:用下标访问不存在的元素,将导致map添加一个新元素,键即为下标值。
下标操作符返回左值,是特定键所关联的值,而不是pair类型。
count检查map对象中某键是否存储。
find读取元素又不插入元素,如果元素不存在,返回end迭代器。
map对象中删除元素:erase。
set支持大部分的map操作,但不支持下标,且没有定义mapped_type类型,value_type也不是pair类型,而是与key_type相同的类型。
与map一样,set存储的键也必须唯一,且不能修改。
set中添加元素:insert。
获取元素:find或者count。
两者支持的操作分别和map与set相同,除了multimap不支持下标。
它们还提供了与众不同的面向迭代器的解决方案:lower_bound,upper_bound,equal_range。
上一章:9. 顺序容器
下一章:[11. 泛型算法](11. 泛型算法.md)