• 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()--返回指向集合中第一个元素的反向迭代器
  • 相关阅读:
    equals方法
    类和对象
    SharePoint品牌化和自定义--第三章节--收集品牌化需求(4)--生成创造性的和UX发现简报
    SharePoint品牌化和自定义--第三章节--收集品牌化需求(3)--要当心的地方
    SharePoint品牌化和自定义--第三章节--收集品牌化需求(2)--引用其他设计的价值
    SharePoint品牌化和自定义--第三章节--收集品牌化需求(1)--要问的关键问题
    SharePoint品牌化和自定义--第三章节--收集品牌化需求
    SharePoint品牌化和自定义--第二章节--用户体验品牌化过程概览(3)--总结
    SharePoint品牌化和自定义--第二章节--用户体验品牌化过程概览(2)--任务与责任
    SharePoint品牌化和自定义--第二章节--用户体验品牌化过程概览(1)--4Ds
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7763759.html
Copyright © 2020-2023  润新知