#Z4007. 二维 map 的使用
二维 map 的使用
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
return 0;
}
- 这一节来实际操作二维的map。首先把班级编号映射成一个名字到人数的映射。
在main函数开头写下
map<int, map<string, int> > info;
- 接下来,读入 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]++;
}
-
然后遍历整个map,首先我们遍历第一维,也就是外层。 在main函数里接着写下
map<int, map<string, int> >::iterator it1; for (it1 = info.begin(); it1 != info.end(); it1++) { }
-
然后遍历第二维,,这时候我们需要先分析一下第一维的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++) { }
-
最后我们按照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;
-
点击 运行,然后输入如下的数据查看效果。
6 1 zgh 2 yuhaoran 2 yuhaoran 1 barty 100 xxxx 50 xxxx