C++STL之map

0. 简介

在这里插入图片描述

1. map的定义

在这里插入图片描述
注意上面红框的内容

2. map容器内元素的访问——掌握增删改查

2.1 通过下标访问

在这里插入图片描述
注意,在上面代码中,如果访问mp['d'],由于d并不在map中, 所以map会因此创建一个mp['d'],并将其值设为0。 很神奇!机试经常会犯的小错误!

2.2 通过迭代器访问

**迭代器可以通俗的理解为指针!**而且STL的迭代器的定义都是一样的套路:

STL类型::iterator it;

在这里插入图片描述
上图中有很多重点知识。需要深刻把握才是!

  1. mp.begin()mp.end()它们返回的其实是迭代器(指针)变量
  2. 迭代器是可以++的,这个得联系结构体数组指针类比思考了。
  3. map按照key升序排列;

3. map常用函数实例解析

3.0 begin(),rbegin(),end()

begin():返回第一个元素的指针;
rbegin():返回最后一个元素的指针;//这个比较冷门了!
end():放回最后一个元素后面的指针;

3.1 find()——查

在这里插入图片描述
注意:

  1. 查找失败会返回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),其他用法一毛一样!

题型训练

  1. ⭐PAT A1112 Stucked Keyboard

参考文档

  1. 算法笔记
  2. 柳婼笔记
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值