c++ map

 

https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

 

根据key值快速查找记录,查找的复杂度基本是Log(N)

一.创建

#include

using namespace std;

map mapStudent;

二.数据的插入

第一种:用insert函数插入pair数据

#include   
  
#include   
  
#include   
  
using namespace std;  
  
int main()  
  
{  
  
    map mapStudent;  
  
    mapStudent.insert(pair(1, "student_one"));  
  
    mapStudent.insert(pair(2, "student_two"));  
  
    mapStudent.insert(pair(3, "student_three"));  
  
    map::iterator iter;  
  
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
  
       cout<first<<' '<second<

第二种:用insert函数插入value_type数据

#include   
  
#include   
  
#include   
  
using namespace std;  
  
int main()  
  
{  
  
    map mapStudent;  
  
    mapStudent.insert(map::value_type (1, "student_one"));  
  
    mapStudent.insert(map::value_type (2, "student_two"));  
  
    mapStudent.insert(map::value_type (3, "student_three"));  
  
    map::iterator iter;  
  
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
  
       cout<first<<' '<second<

第三种:用数组方式插入数据

#include   
  
#include   
  
#include   
  
using namespace std;  
  
int main()  
  
{  
  
    map mapStudent;  
  
    mapStudent[1] = "student_one";  
  
    mapStudent[2] = "student_two";  
  
    mapStudent[3] = "student_three";  
  
    map::iterator iter;  
  
    for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
  
        cout<first<<' '<second<

 

以上三种方式中第一种和第二种是一样的,但是用数组方式就不同了,它可以覆盖以前该关键字对 应的值

 

三.遍历:

用迭代器:

#include   
  
#include   
  
#include   
  
using namespace std;  
  
int main()  
  
{  
  
    map mapStudent;  
  
    mapStudent.insert(pair(1, "student_one"));  
  
    mapStudent.insert(pair(2, "student_two"));  
  
    mapStudent.insert(pair(3, "student_three"));  
  
    map::reverse_iterator iter;  
  
    for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)  
  
        cout<first<<"  "<second<

 

四。查找:

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

cout< 
  

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

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

iter = mapStudent.find(1);  
  
    if(iter != mapStudent.end())  
  
       cout<<"Find, the value is "<second<

五。删除:

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

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

size_type erase(const Key&key);//通过关键字删除

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

//如果你要演示输出效果,请选择以下的一种,你看到的效果会比较好  
  
       //如果要删除1,用迭代器删除  
  
       map::iterator iter;  
  
       iter = mapStudent.find(1);  
  
       mapStudent.erase(iter);  
  
       //如果要删除1,用关键字删除  
  
       int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0  
  
       //用迭代器,成片的删除  
  
       //一下代码把整个map清空  
  
       mapStudent.erase( mapStudent.begin(), mapStudent.end() );  
  
       //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合  
  
       //自个加上遍历代码,打印输出吧  

 

六。修改:

map m_map;
m_map.insert(make_pair("a1",10));
m_map["a1"] = 120;

 

你可能感兴趣的:(c++ map)