通过键存储和读取元素,而顺序容易则通过元素在容器中的位置来存储和访问元素,map/set/multimap/multiset
1:pair类型,包含两个数据成员first/second,都是公有的,可以是不同类型
pair<T1, T2> p1(v1, v20
除构造函数外,还可以使用成员函数make_pair(v1, v2)来创建新的pair对象
2:map 键——值对的集合
map<k, v> m; 需分别指定键和值的类型;对于键的唯一约束为:必须支持<操作符
3:map定义的类型 key_type mapped_type value_type(等价于pair<const k, v>)
1) map迭代器进行解引用将产生pair类型的对象
2) 使用下标访问元素,例word_count["Anna"]
3) insert成员,参数为value_type类型对象,及pair<const k, v>
返回值:包含一个迭代器和一个bool值的pair对象;若插入成功,即键不在容器中,则bool为true,否则bool为false;迭代器始终指向具有给定键的元素
4) 查找并读取map中元素,使用下标的副作用:若不存在则插入
count(k) 返回k的出现次数,对于map对象只可能是0或1
find(k) 返回指向该元素的迭代器,不存在则返回超出末端迭代器
5)删除元素 erase(k) erase(p) erase(b, e) p/b/e均为迭代器
6) 遍历 利用迭代器,begin() end()两个函数
4:set 单纯的键的集合
大多数操作与set相同,除了不支持下标操作和没定义mapped_type类型
1) 初始化:默认构造函数以及其他容器一段范围内的元素初始化
2) 添加元素:insert(k) insert(b, e)
3) 获取元素:find() count()
5:multimap/multiset 支持的操作与map及set相同,仅一例除外:multimap不支持下标运算
1) 添加与删除 erase() 带一个参数,则将拥有该键的元素均删去,带两个参数,则删除指定元素
2) 查找 先用count()获得个数,再用find()获得第一个元素的迭代器,然后利用for循环遍历
利用lower_bound(k) upper_bound(k) equal_range(k)返回一个迭代器的pair对象