C++中 map 的基本操作和嵌套map的使用_、zyx的博客-程序员宝宝_c++ map嵌套map遍历

技术标签: visual studio VC++操作与知识总结  

C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。本文主要总结一下map基本用法和嵌套用法示例。

一、map基本用法
  1   头文件 
  #include   <map> 


  2   定义 
  map<int,   int>   my_Map; //注意这里的int和int可以是其他类型
  或者是typedef     map<int,   int>   MY_MAP; 
  MY_MAP   my_Map; 


  3   插入数据 
  (1)   my_Map[1]   =   1; 
  (2)   my_Map.insert(map<int, int>::value_type(2,2)); 
  (3)   my_Map.insert(pair<int,int>(3,3)); 
  (4)   my_Map.insert(make_pair<string,int>(4,4)); 
  
  4   查找数据和修改数据 
  (1)   int   i   =   my_Map[1]; 
            my_Map[1]   =   i; 
  (2)   MY_MAP::iterator   my_Itr; 
            my_Itr.find(2); 
            int   j   =   my_Itr->second; 
            my_Itr->second   =   j; 
注意:

A.键本身是不能被修改的,除非删除。 

B.不管键存不存在,比如my_Map[1]   =   i;,都会执行赋值操作。
  
  5   删除数据 
  (1)   my_Map.erase(my_Itr); 
  (2)   my_Map.erase(3); 

  
  6   遍历数据 
  for   (my_Itr=my_Map.begin();   my_Itr!=my_Map.end();   ++my_Itr)   {} 
  
  7   其它方法 
  my_Map.size() :返回元素数目 
  my_Map.empty():判断是否为空 
  my_Map.clear() :清空所有元素 

二、嵌套用法

1.示例如下:

[cpp]  view plain copy
  1. map<int,map<int,int> >multiMap; //对于这样的map嵌套定义,    
  2. map<intint> temp;    //定义一个map<int, string>变量,对其定义后在插入multiMap    
  3. temp[9] = 9;    
  4. temp[10] = 10;    
  5. multiMap[10] = temp;    
  6. multiMap[10][11]=11;     
  7. multiMap[5][30]=30;    
  8. map<int,map<int,int> >::iterator multitr;  // 以下是如何遍历本multiMap    
  9. map<int,int>::iterator intertr;    
  10. for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)    
  11. {   
  12.     for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)    
  13.         cout<< multitr ->first<<" "<<intertr->first<<" ("<<intertr -> second <<")"<<endl;    
  14. }   

2.

也可以这样:

[cpp]  view plain copy
  1. map<int,map<int,int>* >multiMap;  
  2. map<intint>* temp = new map<intint>;  
  3. multiMap[10]=temp;  

这样动态new内存,就要记得delete,否则会有内存泄露,delete如下:

[cpp]  view plain copy
  1. map<intint>* temp1;  
  2. for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)    
  3. {   
  4.     temp1 = multitr ->second;  
  5.         delete  temp1;  
  6.         temp1 = NULL;  
  7. }   



map的嵌套特别注意:
1,对于 std::map(std::string, std::map<std::string, string>) 这个类型的赋值和插入方法
std::map<std::string, std::string> neimap;
std::map<std::string, std::map<std::string, std::string> > waimap;
std::string group = "groupp";
waimap[group] = neimap;

std::string key = "keyy";
std::string value = "valuee";
waimap[group].insert(std::make_pair(key.c_str(), value.c_str()));
注意必须用:   waimap[group].insert(std::make_pair(key.c_str(), value.c_str())); 给内层的map赋值(make_pair中的std::string要写作char类型),否则,在有些编译器下是编译不过的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zyx_0604/article/details/80676097

智能推荐

node.js如何开关守护进程_谁抢了我的网名的博客-程序员宝宝

在xshell中将pm2安装到服务器上在项目目录下,运行pm2 start node ./bin/www (此时你的启动项是node ./bin/www)或者pm2 start app.js此时表示进程已经开启,可以关掉xshell在项目目录下,运行pm2 kill此时你的项目就不能在网页上浏览了

zscore函数的数据标准化处理及MATLAB实现_爱趣无穷的博客-程序员宝宝_zscore

一、数据标准化处理在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。数据标准化的方法:有很多种,常用的有“最小—最大标准化”、“Z-sc

fname matlab,求大神帮我解释一下matlab最后几行是什么意思_蒋寻的博客-程序员宝宝

该楼层疑似违规已被系统折叠隐藏此楼查看此楼clear;if nargin&lt;1;action='initialized';end;[fname,pname]=uigetfile('*.wav','Open Wave File');file=[pname,fname];[x,fs,bits]=wavread(file); % 读入声音文件(*.wav)sound(x,fs,bits...

SSM企业版:多数据源+事务_戰士的博客-程序员宝宝

前言之前博客中《SSM+nginx+tomcat+maven+mysql+redis环境搭建及工程全套配置,实现前后端动静分离》只是初级版的SSM体系建设,在这篇文章之前,可参照:https://blog.csdn.net/qq_36632174/article/details/102461255来了解前博客内容。本篇对上一篇做一个升级,配置多数据源,加入事务、定时任务、流程组件activ...

ArcGIS 9.3下载 ArcGIS 9.2下载(包含ArcGIS Desktop、ArcGIS Engine、ArcGIS Server、ArcSDE、workstation)..._weixin_30564901的博客-程序员宝宝

ArcGIS_Server_Java_Editioned2k://|file|ArcGIS_Server_Java_Edition.rar|1125815962|26CF7DF54987FD597754A67F0ADDF23E|h=SSF6PY4G6S74ZPDH5RPHLVPQ6VDKCZ6H|/ ArcGIS_Server_DotNet_Editioned2k://|file|A...

vlc 运行时配置参数读写的实现分析_王二の黄金时代的博客-程序员宝宝_vlc参数设置

版本 v3.0.16 源码http://get.videolan.org/vlc/3.0.16/vlc-3.0.16.tar.xz每一完整的软件系统都会有一个参数配置模块,用来实现运行时不同的参数输入,有些软件系统会做得比较简单,直接通过方法的输入,作为参数,有些系统做得比较通用复杂,比如vlc,也是比较完整独立的通用的配置。vlc 使用c语言编写,实质是一个多媒体播放器, 有OB面向对象的设计,对一个结构体的创建,可以类比为创建一个对象,vlc都通过使用malloc等函数,动态申请内存来存...

随便推点

看完这篇后,别再说你不懂JVM类加载机制了~_Java知音_的博客-程序员宝宝

精彩推荐一百期Java面试题汇总SpringBoot内容聚合IntelliJ IDEA内容聚合Mybatis内容聚合Class类文件的结构任何一个Class文件都对应着唯一一个类或接口的...

恶灵传说之老程序员_机器学习算法与人工智能的博客-程序员宝宝

序这则故事写于1998年1月,爱沙尼亚,塔图。是将我在当地日常工作经历和爱沙尼亚一个民间传说融合改编而成。当时我们做了大量的系统分析,因此故事中提到了CASE工具和图表。不像今天的办公室那般宽敞,当时的办公场所十分拥挤,而且我们真的常常熬夜加班然后在办公室睡袋里过夜。甚至有人会电击别人。趣事很多,容我慢慢道来……一个老程序员这家伙是晚上被带到公司的。“他们把你招收进来了?”一个程序员问,“估计是把

MSP430的内部函数_weixin_30929295的博客-程序员宝宝

内部函数:编译器提供的一些针对目标CPU的特殊函数,以及经过汇编高度优化的常用函数。MSP430的ICC430编译器提供的内部函数如:__delay_cycles(long int cycles)靠CPU空操作延迟cycles个时钟周期。程序中不需要包含任何头文件,可以直接使用内部函数常用精确延时函数如下:#define CPU_F ((double)8000000)#de...

VLC的视频编音频等码格式的缩写_Li Xiaolin的博客-程序员宝宝

在vlc的vlc_fourcc.h文件中使用示例:libvlc_video_set_format(player, "RV32", width, height, width * 4);列出如下/* Video codec */#define VLC_CODEC_MPGV VLC_FOURCC('m','p','g','v')#define VLC_C

[plugin:vite:import-analysis] Failed to parse source for import analysis because the content contain_我的腿毛很可爱的博客-程序员宝宝

[plugin:vite:import-analysis] Failed to parse source for import analysis because the content contains invalid JS syntax. Install @vitejs/plugin-vue to handle .vue files.问题原因问题截图解决方案问题原因vue3+vite的项目,vite从1.xx升级到2.xx问题截图解决方案1、安装"@vitejs/plugin-vue": “^

谷歌开发者大会,3000字记录,好看好吃好玩,还有独家面试..._菜鸟学Python的博客-程序员宝宝

谷歌是一个大部分码农心里都是非常有份量的互联网巨头公司,算算我已经是连续2年参加谷歌开发者大会了。第一次参加也是非常的偶然的机会,然后一发不可收拾,赶着高铁请假2天参加的...

推荐文章

热门文章

相关标签