一、insert

◦1)用insert函数插入pair数据

◦map<int, string> mapStudent;

◦mapStudent.insert(pair<int, string>(1, “student_one”));

◦2)用insert函数插入value_type数据

◦map<int, string> mapStudent;

◦mapStudent.insert(map<int, string>::value_type (1, “student_one”));

◦3)用数组方式插入数据

◦map<int, string> mapStudent;

◦mapStudent[1]=“student1”;

◦mapStudent[2]=“student2”;

前两种如果插入相同的key,则插入失败,但是不会报错,例如

map<int,int> ss;
ss.insert(make_pair(1,1));
ss.insert(make_pair(1,2));

两次插入之后,ss[1]仍然为1.那么我们怎么知道是否插入成功了呢?

可以用pair来获得是否插入成功。
◦pair<map<int, string>::iterator, bool> Insert_Pair;
◦Insert_Pair = mapStudent.insert(map<int, string>::value_type (1, “student_one”));
◦我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。

但是第三种会覆盖原先的值

map<int,int> ss;
ss[1]=1;
ss[1]=2;

两次插入之后,ss[1]wei 2.

二、根据key读map:

首先读取map最直观的方式是map[key],但是这样面临一个问题,可能这个key在map中根本不存在,因此在读取之前需要判断是否存在。

两种方式可以判断是否存在。

int num=map.count(key)

num=0: 不存在

num=1:存在

另一种是使用

map<type,type>::iterator iter;

iter=map.find(key);

if(iter!=map.end()){

  iter->second;//get data

}

三、遍历所有数据

map本身是红黑树,所以数据是有顺序的,可以使用两种顺序呢遍历,实际上就是树的中序遍历。

升序遍历是首先访问左子结点,降序遍历首先访问右子节点。

map<int,int> ss;
ss.insert(make_pair(,));
ss.insert(make_pair(,));
ss.insert(make_pair(,));
ss.insert(make_pair(,));
ss.insert(make_pair(,));
map<int,int>::iterator iter1;
for(iter1=ss.begin();iter1!=ss.end();iter1++){
cout<<iter1->first<<" "<<iter1->second<<endl;
}
cout<<endl;
map<int,int>::reverse_iterator iter2;
for(iter2=ss.rbegin();iter2!=ss.rend();iter2++){
cout<<iter2->first<<" "<<iter2->second<<endl;
}
cout<<endl;

结果为

四、数据的清空与判空

清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明是空map

五、数据的删除

这里要用到erase函数,它有三个重载了的函数,下面在例子中详细说明它们的用法

◦      1)如果要删除1, 用迭代器删除

◦       map<int, string>::iterator iter;

◦       iter = mapStudent.find(1);

◦       mapStudent.erase(iter);

◦       2)如果要删除1,用关键字删除

◦       Int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0

◦       3)用迭代器,成片的删除

◦       //一下代码把整个map清空

◦       mapStudent.earse(mapStudent.begin(), mapStudent.end());

◦       //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合

引用:

http://www.cnblogs.com/nzbbody/p/3409298.html

http://www.cnblogs.com/mattins/p/3531362.html

C++ map使用(基于RBTree)的更多相关文章

  1. String 转Map(基于Guava类库)

    字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...

  2. 《python源代码剖析》笔记 python中的Dict对象

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.PyDictObject对象 -->  C++ STL中的map是基于RB-tre ...

  3. 几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table

    list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的.  如果我自己写,我也会用二叉检索树,它在 ...

  4. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  5. c++ map、vector、list

    总体来说,使用map最简单.支持查找,获取下标不存在也不会出错 map是使用rbtree结构, vector是用连续获取内存的方法,类似hash结构.list是链表结构, 不支持下标. map: 支持 ...

  6. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  7. Hash与Map

    Hash与Map 面试时经常被问到,什么是Hash?什么是Map? 答:hash采用hash表存储,map一般采用红黑树(RB Tree)实现.因此其memory数据结构是不一样的,而且他们的时间复杂 ...

  8. R(七): R开发实例-map热力图

    第四章通过REmap包完成基于map分布图示例,前面提到REmap基于Echart2.0, 一方面在移动终端适应效果差,另一方面REmap提供的热力图仅支持全国及省市大版块map,基于上面的原因,参考 ...

  9. map使用.xml

    map 是一种关联容器,  提供一对一的关联, 关联的形式为: KEY----VALUE     关键字不重复.multimap与map类似,但是允许关键字重复           即:关键字和与之对 ...

随机推荐

  1. Jmeter-获取响应结果中参数出现的次数

    在测试中,有时候会遇到要统计响应结果中某个参数出现了多少次,如果量级很大,一个一个数不太现实,下面讲一下实现自动打印出该参数出现的次数的方法. 例如我的响应信息为:{"ip":&q ...

  2. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...

  3. Windows上x86程序正常但x64程序崩溃问题

    先看下面代码: #include <stdio.h> #include <windows.h> #include <memory> class Test { pub ...

  4. Oracle命令:授权-收回权限-角色

    Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...

  5. Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

    本文提供了一个在Windows环境下使用Visual Studio 2013编辑现有源代码并且保持目录结构的方法.本文使用VS2013中文社区版做示例(本版本为免费版,可在VS官网下载),其他版本的V ...

  6. MC的缓存雪崩现象和缓存无底洞的原因以及导致的后果的总结

    缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降,缓存中确实的数据去数据库查询,短时间内,造成数据库服务器的崩溃. 这时,我们需要重启数据库,但重启一段时间后,又会被压垮,但此时缓存的数 ...

  7. 117 FP页面无法查看

    用户表示117 FP页面无法查看,提示如下错误: 跟进: 1.进入FP服务器可看到以下错误 这个错误的框就表示FP的一个进程报错,自动断掉了,需要重新跑一次EXIT,INIT,PLAN,EXPORT, ...

  8. buildroot 使用小记 - 2 源文件目录结构

    官方下载下来的buildroot源码包在解压后,是一个名为buildroot的文件夹,它下面的目录/文件结构如下: Makefile - 顶级makefile,编译总入口 Config.in - 顶级 ...

  9. Python-实现对表插入百万条数据

    新手小白写的,我自己都不知道对不对,先写下来记着,以后掌握更多Python知识后,再来看下写的对不对. 题目:造一百万条大学生的基本信息(学校.专业.姓名.学号) 分析思路:利用Python的MySQ ...

  10. samba的简单用法总结

    前两天在弄LDAP+samba管理账号的东西,发现对samba的配置不太了解,就拿鸟哥的书看看,嘿嘿,结合自己的一些理解,记录下来. samba主要是实现windos可以共享Linux的东西 1:查看 ...