map 底层
map 的底层和 set 一样,都是红黑树,即一种平衡的二叉搜索树。
map 中存储的数据类型类似 pair,即存储键值对 (key,value).
与 unordered_map 不同,map 不仅建立了键值对之间的 hash 映射关系,还在其内部对于每个键值对以 key 的字典序进行了排列,在进行某些处理的时候相对方便。
相对的,map 的搜索效率没有 unordered_map 高。
map 方法
增删查改
插入元素
insert(pair/make_pair/(key, value))m["new key"] = "new value"
修改元素
- 下标操作符[]
 
1  | m[3] = "new value";  | 
若 key 存在,则更新其映射的 value,若不存在,则创建新的键值对。
- 使用 find 方法和迭代器
 
1  | m.find(key)->second = "new value";  | 
删除元素
1  | mapStu.clear(); //删所有  | 
查找
在修改里提过了,find() 方法返回要查找的键的迭代器,找不到就返回 end() 。
Tip pair 的前一个值为 first,后一个为 second。
set 功能
set 会根据特定的排序规则自动将内部元素排序,不同于 multiset,set 不允许内部元素的重复。
不能直接改变 set 中存储的值,那样会改变排序顺序,应先删除旧值再插入新值。
没有直接存取操作数的方法,只能使用迭代器存取
set 支持高效的关键字查找操作。
和 sort 一样,sort 可以存储自定义类型,但是必须重载 < 运算符。
底层
set 的底层是红黑树,其 key 与 value 相同。
常用方法
- begin
 - end
 - clear
 - count ?不能重复还 count 有啥意义
 - empty
 - equal_range ?返回与给定值相等的两个上下限的迭代器 意义存疑
 - erase
 - find 返回指定元素的迭代器
 - insert
 - lower_bound
 - ket_cmp 返回比较函数
 - size
 - swap
 - upper_bound
 - value_cmp 同 key