#STL#map #vector #string 综合应用
题目描述
蓝桥王国的每个快递都包含两个参数:1.快递单号 2.快递城市
小李是蓝桥王国的一名快递员,每天的快递分拣让他苦不堪言。
于是他想要你帮他设计一个程序用于快递的分拣(将不同快递按城市信息分开)。
输入描述
输入第一行包含一个整数N,表示快递的个数。
接下来的2 ~ N+1行每行包含一个字符串S和一个字符串P,分别为快递单号以及快递对应的城市。
1<=N<=e3,保证数据量不超过e6。
输出描述
输出若干行。按城市的输入顺序依次输出城市的名称以及城市的快递个数,以及该城市的所有快递单号(单号按照输入顺序排序)。
输入输出样例
输入
10
10124214 北京
12421565 上海
sdafasdg213 天津
fasdfga124 北京
145252 上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉
23423565f 沈阳
1245dfwfs 成都
输出
北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg
1245dfwfs
武汉 1
23423
沈阳 1
23423565f
运行限制
最大运行时间: 1s
最大运行内存: 256M
题解
#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 = 1; i <= n; i++) {
string a, b;
cin >> a >> b;
if (!mp.count(b))
citys.push_back(b);
mp[b].push_back(a);
}
for (const auto &city : citys) {
cout << city << ' ' << mp[city].size() << '\n';
for (const auto &i : mp[city]) {
cout << i << '\n';
}
}
return 0;
}
总结:
ios::sync_with_stdio(0)
是为了取消 C++ 的输入输出流与 C 语言标准输入输出流的同步,cin.tie(0)
和 cout.tie(0)
是为了取消输入流和输出流之间的关联,这些操作可以提高输入输出的性能。
首先,代码中使用了 map 这个数据结构,它将城市名称映射为对应的快递地址列表。城市就是key,一个城市对应着一组 vector,通过 vector<string>
来存储该城市的所有快递地址。
通过循环读取输入信息,将每个城市和对应的快递地址存储到 map
中。在存储过程中,如果该城市之前没有出现过,则将它添加到 citys
向量中,以便后续按照城市的顺序输出。
最后,通过遍历 citys 向量,按照每个城市的顺序输出该城市的所有快递地址信息,同时显示出每个城市的快递地址数量。