X-man

导航

hdu 1263 STL的嵌套使用

做做STL题不为别的,只为学会更好的运用它,用起来的确很方便的。

中文题题意不多说,字典顺序输出,地区和水果名称都相同的就求一下和。

#include<stdio.h>

#include<iostream>

#include<map>
#include<string>
using namespace std;
map<string,map<string,int> > m;
int main()
{
int n,nm,t;
string s1,s2;
scanf("%d",&n);
while(n--)
{
m.clear();
scanf("%d",&nm);
for(int i=0;i<nm;i++)
{
cin >> s1 >> s2 >> t;
m[s2][s1]+=t;
}
map<string, map<string,int> > ::iterator it;
for(it = m.begin();it != m.end(); it++)
{
cout << it->first << endl;
map<string, int> ::iterator it1;
for(it1 = it->second.begin(); it1 != it->second.end(); it1++)
cout << " |----" << it1->first << "(" << it1->second << ")" << endl;
}
if(n != 0)
printf("\n");
}
return 0;
}

(1)第一次用map的镶嵌。网上搜的一段代码段增强理解。

View Code
#include<map>  
#include<iostream>  
#include <string>  
using namespace std;  
int main()  
{  
    map<int,map<int,string> >multiMap; //对于这样的map嵌套定义,  
    map<int, string> temp;                //定义一个map<int, string>变量,对其定义后在插入multiMap  
    temp[90] = "hi";  
    temp[100] = "maxi";  
    multiMap[10] = temp;  
    multiMap[10][80]="xiaoyu";   
    multiMap[5][30]="xiaoma";  
    map<int,map<int,string> >::iterator multitr;  // 以下是如何遍历本multiMap  
    map<int,string>::iterator intertr;  
    for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)  
    {  www.2cto.com
        for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)  
            cout<< multitr ->first<<" "<<intertr->first<<" ("<<intertr -> second <<")"<<endl;  
    }  
    system("pause");  
    return 0;  
}  
运行结果:
(2)写本题还学到一点
使用 string 类需要用的是 <string> 头文件。不是 <cstring> 也不是 <string.h>。
(3)漏说了一点map<string,map<string,int>此处无空格会爆错 > m;
只有多用才能加强记忆啊!

posted on 2013-03-31 19:55  雨钝风轻  阅读(242)  评论(0编辑  收藏  举报