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

时间: 2024-08-29 18:55:18

c++ map多重嵌套【转】的相关文章

将多重嵌套数组恢复为一个数组

问题:给定一个任意多重嵌套数组,把它恢复为一个完整的数组,没有嵌套. 样例: Input steamrollArray([[["a"]], [["b"]]]) steamrollArray([1, [2], [3, [[4]]]]) Output ["a", "b"] [1, 2, 3, 4] 实现:利用dfs搜索,一步步找是否是数组(Array.isArray(arr)判断是否是数组) 代码如下: 1 function st

水果(map的嵌套)

夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input第一行正整数N(0<N<=10)表示有N组测试数据. 每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整

学 Java的第30天 Map中嵌套Map

package cn.aaa; import java.util.Iterator;import java.util.Map.Entry;import java.util.HashMap;import java.util.Set; //Map中嵌套存储Map//aaa//java班//  001 周一//  002 周二//hoodp班//  001 周三//  002 周四////java班 :存学号和名字//hoodp班:存学号和名字//aaa:存的是班级//  java班<学号,姓名>/

Java 如何跳出多重嵌套循环体?

1. 在最外层循环语句前定义一个标号,循环体内任意位置都可以使用带有标号的break语句跳出外层循环,结束整个循环. System.out.println("MainClass1 Start..."); ko: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("i=" + i + ",j=" + j); if (j ==

uva 11991 (map vector 嵌套)

其实这题可以直接用vector #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<map> #include<vector> using namespace std; vector<int> str[1000000+100]; int main() { int n,m; int i,j,k; int que,

Java 集合-Map集合嵌套 的遍历四种方式

1 public class Person { 2 private String name; 3 private Integer age; 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public Integer getAge() { 11 return age; 12 } 13 public void setAge(I

关于Reapter多重嵌套的详细补充

<asp:Repeater ID ="rptfour" runat ="server" OnItemDataBound="two_Bind"> <ItemTemplate > <div class="Cont_02l" style="margin-right:19px"> <div class="guanli"><h2><

AngularJS“多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程

这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 1.AngularJS路由嵌套 Angularjs本身自带路由模块,可以满足通过不同的 URL 访问不同的内容,当然实际应用为在单页面点击不同按钮等加载不同页面 之前有关于angular-route路由的介绍,但是只能一层路由嵌套,如果需要多重嵌套就是不够用了 UI-Router作为AngularUI为开发者提供的其中实用的一个模块,根据URL状态组织和控制界面UI的渲染,不是仅仅

第3章 Map集合的嵌套

1.1 Map中嵌套Map1.1.1 案例代码十一 package com.itheima_03; public class Student { private String num; private String name; public Student() { super(); // TODO Auto-generated constructor stub } public Student(String num, String name) { super(); this.num = num;