STL map

感谢http://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

的详细说明

这里进行整理删减

 

map的构造函数

这里要说下的就是,我们通常用如下方法构造一个map:

1 map<int, string> mapStudent;

 

数据的插入

在构造map容器后,我们就可以往里面插入数据了。这里讲种最常用插入数据的方法:

用数组方式插入数据,下面举例说明:

1 map<int, string> mapStudent;  
2 mapStudent[1] = "student_one";
3 mapStudent[2] = "student_two"; 
4 mapStudent[3] = "student_three";  

用数组方式,它可以覆盖以前该关键字对 应的值

 

map的大小

在往map里面插入了数据,我们怎么知道当前已经插入了多少数据呢,可以用size函数,用法如下:

1 Int nSize = mapStudent.size();

 

数据的遍历

这里也提供三种方法,对map进行遍历

第一种:应用前向迭代器,上面举例程序中到处都是了

1 map<int, string>::iterator iter; 
2 for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
3 cout<<iter->first<<' '<<iter->second<<endl; 

第二种:应用反相迭代器,下面举例说明,要体会效果,请自个动手运行程序

1 map<int, string>::reverse_iterator iter; 
2 for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)  
3 cout<<iter->first<<"  "<<iter->second<<endl;  

第三种,用数组的形式,程序说明如下:

1  int nSize = mapStudent.size(); 
2 //此处应注意,应该是 for(int nindex = 1; nindex <= nSize; nindex++) 
3 //而不是 for(int nindex = 0; nindex < nSize; nindex++) 
4 for(int nindex = 1; nindex <= nSize; nindex++)  
5 cout<<mapStudent[nindex]<<endl; 

 

查找并获取map中的元素

这里给出三种数据查找方法

第一种:用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了

第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,

分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.

1 map<int, string>::iterator iter;   
2 iter = mapStudent.find(1);  
3 if(iter != mapStudent.end())  
4 cout<<"Find, the value is "<<iter->second<<endl;  
5 else  
6 cout<<"Do not Find"<<endl;  

第三种:这个方法用来判定数据是否出现,是显得笨了点,但是,我打算在这里讲解

lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)

upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)

例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而upper-bound(2)的话,返回的就是3

1 map<int, string>::iterator iter;  
2 iter = mapStudent.lower_bound(1);  
3 //返回的是下界1的迭代器  
4 cout<<iter->second<<endl;  

 

从map中删除元素

移除某个map中某个条目用erase()

该成员方法的定义如下:

iterator erase(iterator it);//通过一个条目对象删除

iterator erase(iterator first,iterator last)//删除一个范围

clear()就相当于enumMap.erase(enumMap.begin(),enumMap.end());

 1 //如果要删除1,用迭代器删除  
 2 map<int, string>::iterator iter;  
 3 iter = mapStudent.find(1);  
 4 mapStudent.erase(iter);  
 5 //如果要删除1,用关键字删除  
 6 int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0  
 7 //用迭代器,成片的删除  
 8 //一下代码把整个map清空  
 9 mapStudent.erase( mapStudent.begin(), mapStudent.end() );  
10 //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合  

 

map的基本操作函数:

 

1 begin()         返回指向map头部的迭代器
2 clear()        删除所有元素
3 count()         返回指定元素出现的次数
4 empty()         如果map为空则返回true
5 end()           返回指向map末尾的迭代器  
6 erase()         删除一个元素
7 find()          查找一个元素
8 insert()        插入元素
9 size()          返回map中元素的个数
1 rbegin()--返回指向集合中最后一个元素的反向迭代器
2 rend()--返回指向集合中第一个元素的反向迭代器

 

posted @ 2017-10-31 21:15  Z-Y-Y-S  阅读(151)  评论(1编辑  收藏