map容器入门-以洛谷P3613为例

今天学习了map的基本用法,然后挑了一道例题练手。

题目链接:P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题目有个麻烦的地方在于,超市里有很多个寄包柜,而每个寄包柜又有很多个格子构成,也就是说不能直接套用一维的map<int,int>。这种情况我们可以用二维的map来做,但是我觉得更自然的做法应该是用pair或者结构体把寄包柜的编号和格子的编号共同作为key。需要注意的是,如果我们自己写结构体作为map的key的话,一定要重载小于号。这次也是我第一次写重载运算符,之前觉得比较复杂,所以都刻意避开了😆 ,这一次用完pair的写法之后还是决定尝试一下。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <map>
#include <vector>
using namespace std;
struct st{
int x,y;
bool operator<(const st &a) const{ //用结构体作为map的key的话,要重载小于号
if(x==a.x) return y<a.y;
return x<a.x;
}
};
map<st,int> mp;
//map<pair<int,int>,int> mp;
int main(){
int n,q;
cin>>n>>q;
while(q--){
int x,i,j;
cin>>x>>i>>j;
if(x==1){
int k;
cin>>k;
mp[{i,j}]=k;
}else{
cout<<mp[{i,j}]<<endl;
}
}
return 0;
}

map容器入门-以洛谷P3613为例
https://www.jollyan.top/map-rong-qi-ru-men-yi-luo-gu-p3613-wei-li/
作者
梦里徜徉
发布于
2024年8月27日
许可协议