• 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对。

  • 相关阅读:
    Linux安装gitlab
    logback日志配置
    spring源码-aop动态代理-5.3
    【转】阿里云免费SSL证书申请与安装使用(IIS7)
    WebApi 全局使用filter
    Mint-UI Picker 三级联动
    P标签莫名有了margin-top值的原因
    Vue为v-html中标签添加CSS样式
    【转】C# string数组转int数组
    【转】SQLServer汉字转全拼音函数
  • 原文地址:https://www.cnblogs.com/1114250779boke/p/2626477.html
Copyright © 2020-2023  润新知