今天主要梳理一下stl中的map用法
首先是map的定义:map<key,value> mp; key值是唯一的,也就可以作为一个value值的标识,可以通过mp[key]来添加value值,如果value是vector类型,用mp[key].push_back(a); 如果是int型则直接赋值就行。同时由于key值的唯一性,count(a)可以用来判断a值是否存在。遍历map可以使用for (auto [x, y]: mp);
最后我们以蓝桥题库3227和1531为例子进行分享
快递分拣代码中map用来存储城市(key)和单号(value),vector用来存储城市的顺序,在遍历的时候先遍历数组,再根据城市对mp[city]进行遍历,在编写过程中我遇到的问题是,在mp增加值的时候,应该先判断mp中city是否存在,添加vector后在进行统一的mp值添加。
//1531快递分拣
#include<bits/stdc++.h>
using namespace std;
map<string, vector<string>> mp;
vector<string> citys;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n; cin >> n;
for (int i = 0; i < n; i ++) {
string s, p;
cin >> s >> p;
if (!mp.count(p)) {
citys.push_back(p);
}
mp[p].push_back(s);
}
for(const auto &city: citys) {
cout << city << ' ' << mp[city].size() << '\n';
for (const auto &i: mp[city]) {
cout << i << '\n';
}
}
return 0;
}
//3227找到最多的数
#include<bits/stdc++.h>
using namespace std;
map<int, int> mp;
int main() {
//因为这题输入的数据较多,所以取消一下同步流
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1; i <= m * n; i++) {
int x;
cin >> x;
mp[x]++;
}
for (const auto&[a, b] : mp) {
if (b * 2 > m * n)
cout << a;
}
return 0;
}