unorder_map容器必知必会攻略🐘
点击加速到unorder_mapPost not found: 学习笔记/STL/STL之unorder_map
🐘map
map 由红黑树实现,其元素都是 “键值/实值” 所形成的一个对组(key/value pairs)。每个元素有一个键,是排序准则的基础。每一个键只能出现一次,不允许重复。
map 主要用于资料一对一映射的情况,map 内部自建一颗红黑树,这颗树具有对数据自动排序的功能,所以在 map 内部所有的数据都是有序的。比如一个班级中,每个学生的学号跟他的姓名就存在着一对一映射的关系。
特点
- 自动建立 Key - value 的对应。key 和 value 可以是任意你需要的类型。
- 根据 key 值快速查找记录,查找的复杂度基本是 O(logN),如果有 1000 个记录,二分查找最多查找 10次(1024)。
- 增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。
- 对于迭代器来说,可以修改实值,而不能修改 key。
优缺点和适用场景
- 优点:使用平衡二叉树实现,便于元素查找,且能把一个值映射成另一个值,可以创建字典。
- 缺点:每次插入值的时候,都需要调整红黑树,效率有一定影响。
- 适用场景:适用于需要存储一个数据字典,并要求方便地根据key找value的场景.
1、如果需要高效的随机存取,不在乎插入和删除的效率,使用 vector。
2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用 list。
3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用 deque。
4、如果打算存储数据字典,并且要求方便地根据 key 找到 value,一对一的情况使用 map,一对多的情况使用 multimap。
5、如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用 set,不唯一存在的情况使用 multiset。