题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1263
这是第二遍做这个题啦,第一次做的时候还没有接触map,就用的结构体排序,当时还觉得挺厉害的,后来知道了map看到了大神用双重map做这道题感觉自己low暴了 然后就模仿这写了一哈。看起来蛮简单的感觉其实还蛮难的,因为以前一直用的C的scanf之类的,第一次用cin>>和cout<<。
第一个map map<string,int>b ;第二个 map<string,<map<string,int> > a; 然后用迭代器就好了,对了 map会自动为你调整顺序的。
代码如下
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<map>
#include<iterator>
#include<string>
using namespace std;
map<string,map<string,int> > a;
map<string,int> b;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
a.clear();
b.clear();
int t,ge;
char ch[100],typ[100];
scanf("%d",&t);
while(t--)
{
scanf("%s%s%d",typ,ch,&ge);
a[ch][typ]+=ge;
}
map<string, map<string,int> >::iterator t1;
map<string,int>::iterator t2;
for(t1=a.begin();t1!=a.end();t1++)
{
cout<<t1->first<<endl;
b=t1->second;
for(t2=b.begin();t2!=b.end();t2++)
{
cout<<" |----"<<t2->first<<"("<<t2->second<<")"<<endl;
}
}
if(T) printf("\n");
}
return 0;
}