#Z4007. 二维 map 的使用

二维 map 的使用

#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
  

    return 0;

}
  1. 这一节来实际操作二维的map。首先把班级编号映射成一个名字到人数的映射。 在main函数开头写下 map<int, map<string, int> > info;
  2. 接下来,读入 n 个同学的信息,每个信息包含一个班级编号和名字。然后更新info,把相应班级中的相应名字数量加 1 。 在main函数里接着写下
int n;
cin >> n;
for (int i = 0; i < n; i++) {
    int class_id;
    string name;
    cin >> class_id >> name;
    info[class_id][name]++;
}
  1. 然后遍历整个map,首先我们遍历第一维,也就是外层。 在main函数里接着写下

    map<int, map<string, int> >::iterator it1;
    for (it1 = info.begin(); it1 != info.end(); it1++) {
    
    }
    
  2. 然后遍历第二维,,这时候我们需要先分析一下第一维的it1迭代器。实际上,it1->first是一个int,表示班级编号。而it1->second是一个 map<string, int> 容器,表示某个班级里每个名字个数的map,现在我们正要准备遍历这个map。

    因此it1->second.begin()是内层迭代器的起始位置,it1->second.end()是这个map的尾后迭代器。 在for循环里面写下

    map<string, int>::iterator it2;
    for (it2 = it1->second.begin(); it2 != it1->second.end(); it2++) {
    
    }
    
  3. 最后我们按照There are a people named xxx in class b 的格式输出每一条信息。

    it2->second对应的是a。 it2->first对应的是xxx。 it1->first对应的是b。 在最内层循环写下

    cout << "There are " << it2->second << " people named "
         << it2->first << " in class " << it1->first << endl;
    
  4. 点击 运行,然后输入如下的数据查看效果。

    6
    1 zgh
    2 yuhaoran
    2 yuhaoran
    1 barty
    100 xxxx
    50 xxxx