0. 简介
1. map的定义
注意上面红框的内容
2. map容器内元素的访问——掌握增删改查
2.1 通过下标访问
注意,在上面代码中,如果访问mp['d']
,由于d
并不在map
中, 所以map
会因此创建一个mp['d']
,并将其值设为0。 很神奇!机试经常会犯的小错误!
2.2 通过迭代器访问
**迭代器可以通俗的理解为指针!**而且STL的迭代器的定义都是一样的套路:
STL类型::iterator it;
上图中有很多重点知识。需要深刻把握才是!
mp.begin()
和mp.end()
它们返回的其实是迭代器(指针)变量。- 迭代器是可以
++
的,这个得联系结构体数组指针类比思考了。 map
按照key
升序排列;
3. map常用函数实例解析
3.0 begin(),rbegin(),end()
begin()
:返回第一个元素的指针;
rbegin()
:返回最后一个元素的指针;//这个比较冷门了!
end()
:放回最后一个元素后面的指针;
3.1 find()——查
注意:
- 查找失败会返回
map.end()
,因此我们可以使用it==map.end()
来判断map
中是否有这个键。
3.2 erase()——删
3.2.1 删除单个元素
上述使用迭代器进行erase()
其实很少用,常见的使用key
.
因为删除其实是变相的查找,所以时间复杂度为 O ( l o g N ) O(logN) O(logN) .
3.2.2 删除一个区间内的所有元素
上述区间删除并不常用,但是值得注意的是C++的区间默认都是左闭右开。
3.3 size()
3.4 clear()——删
STL容器标配函数,每个都有的。
3.5 count()——查
究极常见,判断一个map中是否含有一个键:
map<int,int> mp;
if(mp.count(1) != 0){
cout<<"存在此键";
}
注意,虽然单词叫count
,但是意义是hasKey()
!而且count()
的返回值只能是0或者1.
4. 补充——unordered_map
如上,除了没有排序,导致时间复杂度为
O
(
1
)
O(1)
O(1),其他用法一毛一样!
题型训练
参考文档
- 算法笔记
- 柳婼笔记