map的用法(初级)

作者:无名 - 开源软件 -

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] 

map<int,map<int,int> >multiMap; //对于这样的map嵌套定义,    

map<int, int> temp;    //定义一个map<int, string>变量,对其定义后在插入multiMap    

temp[9] = 9;    

temp[10] = 10;    

multiMap[10] = temp;    

multiMap[10][11]=11;     

multiMap[5][30]=30;    

map<int,map<int,int> >::iterator multitr;  // 以下是如何遍历本multiMap    

map<int,int>::iterator intertr;    

for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)    

{   

    for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)    

        cout<< multitr ->first<<" "<<intertr->first<<" ("<<intertr -> second <<")"<<endl;    

}   

 

2.

 

也可以这样:

 

[cpp] 

map<int,map<int,int>* >multiMap;  

map<int, int>* temp = new map<int, int>;  

multiMap[10]=temp;  

 

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

 

[cpp]  

map<int, int>* temp1;  

for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)    

{   

    temp1 = multitr ->second;  

        delete  temp1;  

        temp1 = NULL;  

}   


该篇内容就是由IT人知识库(原文链接:http://www.itpeo.net/15310/3488251.html)小编为各位整理





memcmp与strcmp区别

一、memcmp含义 Compare characters in two buffers. i... ...

POI与JXL写Excel的性能对比

         在java项目中... ...

编写框架代码的注意事项

错误处理: 对于运行时可能出现的环境运行错误,在框架内部不要用try完全处理掉,而是要显示向外部... ...

怎样在线程外部控制线程运行

一个在外部控制线程运行的一个论证实例。标准的java因为安全问题取消了stop等控制方法,我想看看能不能自己把它们... ...

推荐给每个找工作的IT毕业生--打鸡血书

本文忘了在哪里下载的了,转过来与各位共享 一、 求职历程总结 2007年1月10日,随着在三方协... ...

linux(ubuntu)下安装nginx 笔记

这两天突然想在ubuntu下 安装nginx模拟真实环境,第一次安装还真是一个充满奇异的旅程,走了很多歪路但也从中... ...

Unix crontab命令 添加定时任务

Unix crontab命令 添加定时任务 使用crontab命令要求root身份1. cr... ...

rfedfre

随手写了个android应用

最近比较闲,就边学边写,做了个android下的 dota 攻略型应用。 目前还没发布到市场上,也没有加广告,... ...

rfedfre

高仿QQ空间-进阶篇

更新说明: 一 增加了照片的墙的功能,可以让你的照片可以流动哦!不信,你去试试就知道啦,O(∩_∩)O哈哈哈~... ...

rfedfre

1.变量和常量

1 标识符 标识符就是用于给 Java 程序中变量、类、方法等命名的符号。 1>.  ... ...

慎用异常(Exception)

异常对性能不利。 1.抛出异常首先要创建一个新的对象。 2.Throwable接口的构造函数调用名为fil... ...

改进fastjson的WriteClassName特性时的输出数据容量

在使用fastjson输出省市县三级信息时,数量高达300K,由于我们的数据结构相同,因此每个类都输出了完整的类名... ...

mongodb建立索引时怎么指定超时时间

mongodb自从2.2版本起为索引建立了TTL(time to live),可以指定一个类型为日期的字段为文档的... ...

JS日期格式化(从YYYY-MM-DD到日期类)

字符串格式日期利用阅读,但不利于标准化存储,可以通过以下函数转化为Javascript日期类: // date... ...

(翻译)H5数据流消息推送机制Event Source

关于数据推送,传统方法是前端(不)定时发送HTTP请求进行轮询。但这种方式非常的损耗服务器资源,不适合访问量高的情... ...

linux命令后台运行技巧整理(1)

所有内容搜集于网络,部分做了简单翻译 Linux提供了fg和bg命令,让你轻松调度正在运行的任务。 假设你... ...

rfedfre

基于标签方式的工作流启动及任务执行开发说明

基于现在的系统的整合需求,本系统提供基于标签的工作流整合方式,工作流的启动及执行下一步时,均需要通过可以通... ...

rfedfre

厦门 测试夹具

厦门 测试夹具    我司专\业制\作测试工装夹具治具、过锡炉回流焊治具、老化架、热... ...

Guile资源站点

官方站点:http://www.gnu.org/software/guile/ http://com... ...

rfedfre

Linux网络编程书籍推荐

首先要说讲述计算机网络和TCP/IP的书很多。   先要学习网络知识才谈得上编程 讲述计算机... ...