hdu 1263水果

http://acm.hdu.edu.cn/showproblem.php?pid=1263

水果

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1528    Accepted Submission(s): 608


Problem Description
夏天来了~~好开心啊,呵呵,好多好多水果~~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
 
Input
第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
 
Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
 
Sample Input
1 5 apple shandong 3 pineapple guangdong 1 sugarcane guangdong 1 pineapple guangdong 3 pineapple guangdong 1
 
Sample Output
guangdong |----pineapple(5) |----sugarcane(1) shandong |----apple(3)
 
Source
仰慕一下别人写的map嵌套
View Code
 1 #include<iostream>
 2 #include<map>
 3 #include<string>
 4 using namespace std;
 5 int main()
 6 {
 7     int t,n;
 8     int count;
 9     string fruit,address;
10     cin>>t;
11     while(t--)
12     {
13         map<string,map<string,int> >mm;
14         map<string,map<string,int> >::iterator itw;
15         map<string,int>::iterator itn;
16         cin>>n;
17         while(n--)
18         {
19         cin>>fruit>>address>>count; 
20         
21         mm[address][fruit]+=count;
22         }
23         for(itw=mm.begin();itw!=mm.end();itw++)
24         {
25             cout<<itw->first<<endl;
26             for(itn=itw->second.begin();itn!=itw->second.end();itn++)
27             {
28                 cout<<"   |----"<<itn->first<<"("<<itn->second<<")"<<endl;
29             }
30         }
31         if(t!=0) cout<<endl;
32         
33     }
34 }

map嵌套一些知识:

STL中map的嵌套使用  

 
 
最近开发中要用到STL,然后自己查看了一些资料,并写了一些代码。在使用<map>中,想起了如果是map嵌套,该如何应用呢?下面是我的coding内容:

        对于传统的map,我们只需要:

        #include<map>

        #include<iostream>

        int main()

        {

        map<int, string> scores;

        scores.insert(make_pair(100,"maxi"));

        scores[100]="MAXI";

        scores.insert(make_pair(300,"xiaoyu"));

        scores.insert(make_pair(300,"xiao"));

        scores[200]="xiaoma";

        map<int,string>::iterator pScores;

        for(pScores=scores.begin();pScores!=scores.end();pScores++)

        {

                std::cout<<pScores->first<<"  "<<pScores->second<<endl;

        }

       

         return 0;}

         结果输出:

         100  MAXI

         200 xiaoma

         300 xiaoyu

         由此可以看出,scores[100]="MAXI"会直接替换掉原来100map对应的value,而如果调用scores.insert()函数,则由于本map是单映射的,

        但如果我想定义嵌套的map并对它进行遍历,该如何进行呢:

        #include<map>

        #include<iostream>

        int main()

        {

              map<int,map<int,string> >multiMap; //对于这样的map嵌套定义,有两种插入方法:

              map<int, string> temp;  //定义一个map<int, string>变量,对其定义后在插入multiMap

              temp.insert(make_pair(90,"hi"));

              temp.insert(pair<int,string>(100,"maxi)); //pair<int,string>()和make_pair()有相同作用

              multiMap.insert(make_pair(10, temp));   //将临时变量插入到multiMap中

              multiMap[10][80]="xiaoyu"; //可以直接赋值

              mulitMap[5][30]="xiaoma";

             

              map<int,map<int,string> >::iterator multitr;  // 以下是如何遍历本multiMap
              map<int,string>::iterator intertr;
              for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)
              {
                   for(intertr=
multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)
                    std::cout<<
multitr ->first<<" "<<intertr->first<<" ("<< intertr -> second <<")"<<endl;
              }

              return 0;

          } 

    

          运行结果如下:

          

              5 30 (xiaoma)
             10 80 (xiaoyu)
             10 90 (hi)
             10 100 (maxi)

          总结,map的成员加入有两种赋值方法,一种是调用map.insert()函数,这样,由于是单映射,后面加入的新的pair对如果有key值和前面一样,那么后面的pair对元素将不会被加入到map中;但如果是直接[ ]=赋值操作的话,相当于数组赋值,会直接替换掉原来具有相同key域的pair对。

原文地址:https://www.cnblogs.com/1114250779boke/p/2626477.html