最近開發中要用到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對。本發現會對如何增加pair對數據的調用方法有些指導意義。