C++中的map嵌套应用

    对于传统的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对。本发现会对如何增加pair对数据的调用方法有些指导意义。

              

猜你喜欢

转载自blog.csdn.net/Strive_Y/article/details/81530039