C++ map使用(基于RBTree)
一、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.那么我们怎么知道是否插入成功了呢?
但是第三种会覆盖原先的值
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)的更多相关文章
- String 转Map(基于Guava类库)
字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...
- 《python源代码剖析》笔记 python中的Dict对象
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.PyDictObject对象 --> C++ STL中的map是基于RB-tre ...
- 几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在 ...
- 《STL系列》之map原理及实现
上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...
- c++ map、vector、list
总体来说,使用map最简单.支持查找,获取下标不存在也不会出错 map是使用rbtree结构, vector是用连续获取内存的方法,类似hash结构.list是链表结构, 不支持下标. map: 支持 ...
- Java 容器(list, set, map)
java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...
- Hash与Map
Hash与Map 面试时经常被问到,什么是Hash?什么是Map? 答:hash采用hash表存储,map一般采用红黑树(RB Tree)实现.因此其memory数据结构是不一样的,而且他们的时间复杂 ...
- R(七): R开发实例-map热力图
第四章通过REmap包完成基于map分布图示例,前面提到REmap基于Echart2.0, 一方面在移动终端适应效果差,另一方面REmap提供的热力图仅支持全国及省市大版块map,基于上面的原因,参考 ...
- map使用.xml
map 是一种关联容器, 提供一对一的关联, 关联的形式为: KEY----VALUE 关键字不重复.multimap与map类似,但是允许关键字重复 即:关键字和与之对 ...
随机推荐
- 14. Reverse Linked List II
Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...
- python 向上取整ceil 向下取整floor 四舍五入round
#encoding:utf-8 import math #向上取整 http://www.manongjc.com/article/1335.html print "math.ceil--- ...
- VC中GBK与UTF8转化
void ConvertGBKToUtf8(CString& strGBK) { int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strG ...
- sencha touch 入门系列 (二)sencha touch 开发准备
这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...
- 纸上谈兵:栈(stack)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 栈(stack)是简单的数据结构,但在计算机中使用广泛.它是有序的元素集合.栈最显 ...
- python基础07 函数
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后 ...
- 'telnet' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
在telnet与ftp服务器相连时出现的问题: 原因:windows自带telnet,只是没有安装 解决如下: 然后关机重启
- numpy.linalg.eig
1.转置对于二维数组有用,对一位数组无效 2.理解特征值和特征向量的对应关系 a=np.array([[1 ,2, 3],[4, 5, 6],[7, 8, 9]]) a Out[27]: array( ...
- 在数学建模中学MATLAB
为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...
- 使用imap协议接收邮件
之前一直使用PHPMail类进行发送邮件,这个是一个非常强大的类,但是其实底层就是使用mail()函数来进行发送的. 但是现在公司有个需求是 写个程序需要实时的接收邮件,主要是判断邮件发出去了,并且 ...