map的巢狀使用
阿新 • • 發佈:2019-01-31
hdu1263水果;
http://acm.hdu.edu.cn/showproblem.php?pid=1263
題目大意;
輸入;按水果名 生產地 數量;
輸出;按字典序先輸出生產地,再輸出在該生產地水果的量;按水果名的字典序排列;
先看下map的巢狀定義是什麼樣子吧;
map<string , map<string,int> > mp;
map<string , int>::iterator itf;
map<string , map<string , int> >::iterator it;
還要注意的是;在輸出的時候注意級別的搭配;
for(it=mp.begin(); it != mp.end(); it++)
{
cout<<(*it).first<<endl;
for(itf=(*it).second.begin();itf != (*it).second.end();itf++)
{//注意級別搭配;
cout<<" |----"<<(*itf).first<<"("<<(*itf).second<<")" <<endl;
}
}
看程式碼;
#include<stdio.h>
#include<string>
#include<iostream>
#include<map>
using namespace std;
struct furit
{
string name;
string place;
int num;
}sg;
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
map <string , map<string,int> > mp;
map<string , int>::iterator itf;
map<string , map<string , int> >::iterator it;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
cin>>sg.name>>sg.place>>sg.num;
mp[sg.place][sg.name] += sg.num;
}
for(it=mp.begin(); it != mp.end(); it++)
{
cout<<(*it).first<<endl;
for(itf=(*it).second.begin();itf != (*it).second.end();itf++)
{
cout<<" |----"<<(*itf).first<<"("<<(*itf).second<<")"<<endl;
}
}
if(t)printf("\n");
}
}