关联容器 map

map是一种关联容器,特点是增加删除比较方便

 

直接看如何使用吧:

首先引入头文件

#include <map>

就像 string str = "abc" 一样我们如何用map声明一个变量然后给他赋值

map<int, string> mymap;

这里 int 是键,string 是键值。

也就是通过 int 可以索引找到string

 

 

那么如何向这个map中增添数据呢?

第一种方法:

  使用 inset 函数插入 pair

 

#include <map>  
#include <string>  
#include <iostream>  
  
using namespace std;  
  
int main()  
{  
  
    map<int, string> Mymap;  
  
    //添加三个新元素
    Mymap.insert(pair<int, string>(1, "xiaohong"));  
    Mymap.insert(pair<int, string>(2, "xiaolan"));  
    Mymap.insert(pair<int, string>(3, "xiaolv"));  
    
    //使用迭代器遍历
    map<int, string>::iterator iter;  
    for(iter = Mymap.begin(); iter != Mymap.end(); iter++)  
    {    
        cout<<iter->first<<' '<<iter->second<<endl;  
    }
   return 0; }

 

 

第二种方法:

  使用 insert 插入 value_type 数据

int main()  
{  
  
    map<int, string> Mymap;  
  
    //添加三个新元素
    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    //使用迭代器遍历
    map<int, string>::iterator iter;  
    for(iter = Mymap.begin(); iter != Mymap.end(); iter++)  
    {    
        cout<<iter->first<<' '<<iter->second<<endl;  
    }
   return 0; }

 

 

第三种方法:

  数组

int main()  
{  
  
    map<int, string> Mymap;  
  
    //添加三个新元素
    Mymap[1] = "xiaohong";
    Mymap[2] = "xiaolan";
    Mymap[3] = "xiaolv";
    
    //使用迭代器遍历
    map<int, string>::iterator iter;  
    for(iter = Mymap.begin(); iter != Mymap.end(); iter++)  
    {    
        cout<<iter->first<<' '<<iter->second<<endl;  
    }
   return 0; }

 

 

 

判断是否插入成功

 

int main()  
{  
  
    map<int, string> Mymap;  
  
    //pair有两个变量,第一个是一个map容器,第二个是bool类型的值通过这个变量即可判断是否插入成功
    pair<map<int,string>::iterator,bool> Insert_Pair;

    //添加一个元素,并用Insert_Pair获取返回值
    Insert_Pair = Mymap.insert(pair<int, string>(1, "xiaohong"));  
    if(Insert_Pair.second == true)  
        cout<<"Insert Successfully"<<endl;  
    else  
        cout<<"Insert Failure"<<endl; 
    
    //使用迭代器遍历
    map<int, string>::iterator iter;  
    for(iter = Mymap.begin(); iter != Mymap.end(); iter++)  
    {    
        cout<<iter->first<<' '<<iter->second<<endl;  
    }
   return 0; }

 

 

 

遍历

除了用迭代器之外也可以用数组的方式遍历

  
int main()  
{  
  
    map<int, string> Mymap;  
  
    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    for(int nindex = 1; nindex <= Mymap.size(); nindex++)  
    {
        cout<<Mymap[nindex]<<endl;  
    }
   return 0; }

 

 

查找

find 根据键查找键值,如果成功找到则返回待找的键位置,如果找不到返回end()位置

int main()  
{  
  
    map<int, string> Mymap;  

    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    //迭代器
    map<int, string>::iterator iter;

    //查找键为2的值
    iter = Mymap.find(2);
    if (iter != Mymap.end())
    {
        cout<<"find the value is : "<<iter->second<<endl;
    }
    else
    {
        cout<<"do not find "<<endl;
    }
    
    return 0;
}  

 

 

删除

使用迭代器删除

这里我将打印封起来

#include <map>  
#include <string>  
#include <iostream>  
#include <string>
  
using namespace std;  

void printf_map(map<int,string> Mymap)
{
    cout << "---------------------"<<endl;
    map<int, string>::iterator iter;
    for(iter = Mymap.begin(); iter != Mymap.end(); iter++)  
    {    
        cout<<iter->first<<' '<<iter->second<<endl;  
    }
    cout << "---------------------"<<endl;
}
  
int main()  
{  
  
    map<int, string> Mymap;  

    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    printf_map(Mymap);

    //使用迭代器删除第一个元素
    map<int, string>::iterator eraiter;
    eraiter = Mymap.find(1);
    Mymap.erase(eraiter);

    printf_map(Mymap);

    return 0;
}  

输出结果如下:

---------------------
1 xiaohong
2 xiaolan
3 xiaolv
---------------------
---------------------
2 xiaolan
3 xiaolv
---------------------

 

通过关键字删除

int main()  
{  
  
    map<int, string> Mymap;  

    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    printf_map(Mymap);

    //使用迭代器删除第一个元素
    int n = Mymap.erase(1);

    printf_map(Mymap);

    return 0;
}  

输出结果和刚才一样

 

 

范围删除

int main()  
{  
  
    map<int, string> Mymap;  

    Mymap.insert(map<int, string>::value_type(1, "xiaohong"));  
    Mymap.insert(map<int, string>::value_type(2, "xiaolan"));  
    Mymap.insert(map<int, string>::value_type(3, "xiaolv"));  
    
    printf_map(Mymap);

    //使用迭代器删除一段元素
    Mymap.erase(Mymap.begin(),Mymap.end());

    printf_map(Mymap);

    return 0;
}  

输出:

---------------------
1 xiaohong
2 xiaolan
3 xiaolv
---------------------
---------------------
---------------------

没了,什么都没了。。

 

 

常用函数

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回指定元素出现的次数

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数

 

posted @ 2020-09-04 14:49  祁峰_1024  阅读(131)  评论(0编辑  收藏  举报