zoukankan      html  css  js  c++  java
  • 关联容器 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的函数

  • 相关阅读:
    Adodb.recorset中Field字段的属性及意义
    郁闷的新一篇
    最近身体越来越差了。。。
    成事在天,谋事在人
    我要带我老婆去看看机场...
    Javascript 时间比较
    同步异步传输
    使用WSPBuilder 生成wsp文件,部署,激活,使用
    动态添加SqlParameter
    C#几种排序方法
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/13613821.html
Copyright © 2011-2022 走看看