您的位置:首页 > 其它

STL中map的嵌套使用

2012-08-22 10:20 387 查看
最近开发中要用到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对。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: