题目:链接

题意

输入一系列快递单号以及城市,统计每座城市的快递单号数量,并按照城市输入顺序,输出城市、快递单号的数量以及每一个快递单号。

思路

重点在于数据的存储形式,STL中的map可以存储键值对,并且能够很方便的通过“键”查找“值”,所以可以采用map<string, vector> mp的形式,前一个string存储城市名字,后一个vector容器中存放快递单号。还需要注意的一点是需要记录下城市的输入顺序,所以还需要一个vector cities变量来存储城市名字。

心得

进一步掌握STL中的map,比如:mp.count(b),mp[b].size()……

代码

#include <bits/stdc++.h>
using namespace std;

map<string,vector<string>> mp;
vector<string> cities;

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 a,b;cin>>a>>b;
    if(!mp.count(b)) cities.push_back(b);
    mp[b].push_back(a);
  }
  for(const auto&city:cities)
  {
    cout<<city<<' '<<mp[city].size()<<'\n';
    for(const auto&i:mp[city])
    {
      cout<<i<<'\n';
    }
  }
  return 0;
}