C++学习 STL之六:map/multimap用法详解

来源:互联网 发布:北龙中网域名认证 编辑:程序博客网 时间:2024/06/05 23:05

map/multimap    

使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。


map和multimap内部的数据结构也是平衡二叉树。


    map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。

常用函数

1.构造函数和析构函数    

map m:创建空映射,不包含任何元素

map m(op):以op为排序准则,产生一个空的map

map m1(m2):复制c2中的元素到c1中

map m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射

map m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射。

m.~set()销毁所有元素,释放内存

multimap mm:创建空映射,不包含任何元素

multimap mm(op):以op为排序准则,产生一个空的multimap

multimap m1(m2):复制m2中的元素到m1中

multimap m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射

multimap m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射

m.~multimap()销毁所有元素,释放内存

[cpp]view plaincopyprint?
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include <map>  
  4.   
  5. using namespace std;  
  6.   
  7. bool fncomp (char lhs, char rhs) {return lhs<rhs;}  
  8.   
  9. struct classcomp {  
  10.     bool operator() (const char& lhs, const char& rhs) const  
  11.     {return lhs<rhs;}  
  12. };  
  13.   
  14. int main ()  
  15. {  
  16.     map<char,int> first;  
  17.   
  18.     first['a']=10;  
  19.     first['b']=30;  
  20.     first['c']=50;  
  21.     first['d']=70;  
  22.   
  23.     map<char,int> second (first.begin(),first.end());  
  24.   
  25.     map<char,int> third (second);  
  26.   
  27.     map<char,int,classcomp> fourth;                 // class as Compare  
  28.   
  29.     bool(*fn_pt)(char,char) = fncomp;  
  30.     map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare  
  31.   
  32.     return 0;  
  33. }  

2.大小、判断空函数

    int size() const:返回容器元素个数
    bool empty() const:判断容器是否空,若返回true,表明容器已空。

3.增加删除函数

    iterator insert(const value_type& x):插入元素x

    iterator insert(iterator it,const value_type& x):在迭代指针it处插入元素x
    void insert(const value_type *first,const value_type* last):插入[first, last)之间元素

    iterator erase(iterator it):删除迭代指针it处元素

    iterator erase(iterator first,iterator last):删除[first, last)之间元素

    size_type erase(const Key& key):删除键值等于key的元素

[cpp]view plaincopyprint?
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include <map>  
  4.   
  5. using namespace std;  
  6.   
  7.   
  8. int main ()  
  9. {  
  10.     map<char,int> mymap;  
  11.   
  12.     mymap.insert(pair<char,int>('a',10));  
  13.     mymap.insert(pair<char,int>('z',200));  
  14.   
  15.     pair<map<char,int>::iterator,bool> ret;  
  16.     ret = mymap.insert(pair<char,int>('z',500));  
  17.     if (ret.second == false)  
  18.     {  
  19.         cout<<"element 'z' already existed";  
  20.         cout<<"with a value of "<<ret.first->second<<'\n';  
  21.     }  
  22.   
  23.     map<char,int>::iterator it = mymap.begin();  
  24.     mymap.insert(it,pair<char,int>('b',300));  
  25.     mymap.insert(it,pair<char,int>('c',400));  
  26.   
  27.     map<char,int> anothermap;  
  28.     anothermap.insert(mymap.begin(),mymap.find('c'));  
  29.   
  30.     cout<<"mymap contains :\n";  
  31.     for (it = mymap.begin();it!= mymap.end();it++)  
  32.     {  
  33.         cout<<it->first<<"=>"<<it->second<<'\n';  
  34.     }  
  35.   
  36.     cout<<"anothermap contains :\n";  
  37.     for (it = anothermap.begin();it!= anothermap.end();it++)  
  38.     {  
  39.         cout<<it->first<<"=>"<<it->second<<'\n';  
  40.     }  
  41.     return 0;  
  42. }  
上述代码运行结果为

[cpp]view plaincopyprint?
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include <map>  
  4.   
  5. using namespace std;  
  6.   
  7.   
  8. int main ()  
  9. {  
  10.     map<char,int> mymap;  
  11.     map<char,int>::iterator it;  
  12.       
  13.     mymap['a'] = 10;  
  14.     mymap['b'] = 20;  
  15.     mymap['c'] = 30;  
  16.     mymap['d'] = 40;  
  17.     mymap['e'] = 50;  
  18.     mymap.insert(pair<char,int>('f',60));  
  19.   
  20.     cout<<"initial mymap contains :\n";  
  21.     for (it = mymap.begin();it!= mymap.end();it++)  
  22.     {  
  23.         cout<<it->first<<"=>"<<it->second<<'\n';  
  24.     }  
  25.   
  26.     it = mymap.find('b');  
  27.     mymap.erase(it);  
  28.   
  29.     mymap.erase('c');  
  30.   
  31.     it = mymap.find('e');  
  32.     mymap.erase(it,mymap.end());  
  33.   
  34.     cout<<"now mymap contains :\n";  
  35.     for (it = mymap.begin();it!= mymap.end();it++)  
  36.     {  
  37.         cout<<it->first<<"=>"<<it->second<<'\n';  
  38.     }  
  39.   
  40.     return 0;  
  41. }  

上述代码运行结果为:


如果想往map/multimap中修改一个映射的值,应先插入一个新映射,再把与修改的映射删除。

4.遍历函数    

    iterator begin():返回首元素的迭代器指针

    iterator end():返回尾元素的迭代器指针

    reverse_iterator rbegin():返回尾元素的逆向迭代器指针

    reverse_iterator rend():返回首元素前一个位置的迭代器指针

5.操作函数   

    const_iterator lower_bound(const Key& key):返回键值大于等于key的迭代器指针    const_iterator upper_bound(const Key& key):返回键值大于key的迭代器指针    int count(const Key& key) const:返回键值等于key的元素的个数    pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中键值等于key的迭代指针[first, last)    const_iterator find(const Key& key) const:查找功能,返回键值等于key的迭代器指针    void swap(set& s):交换但映射元素    void swap(multiset& s):交换多映射元素  

6.特殊函数

    reference operator[](const Key& k):仅在但映射map类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝两岁结巴了怎么办 人多说话就紧张怎么办 小孩拉尿不叫人怎么办 2岁宝宝说话有点结巴怎么办 两岁半的宝宝说话结巴怎么办 2个月宝宝怕洗澡怎么办 2岁宝宝不喜欢喝奶粉怎么办 宝宝断奶不喜欢喝奶粉怎么办 宝宝不喜欢奶粉的味道怎么办 四个月宝宝不喜欢吃奶粉怎么办 四岁宝宝有口臭怎么办 4个月宝宝口臭怎么办 2岁宝宝有口臭是怎么办 两岁宝宝有口气怎么办 2岁宝宝口气重是什么原因怎么办 两岁宝宝口气重怎么办 两岁宝宝有口臭怎么办 两岁身高不达标怎么办 两岁宝宝82厘米怎么办 2岁幼儿说话结巴怎么办 2岁的宝宝结巴怎么办 2岁半宝宝口吃怎么办 2周岁宝宝不说话怎么办 三周岁宝宝不说话怎么办 2周岁宝宝突然说话结巴怎么办 两周岁宝宝突然说话结巴怎么办 三周岁宝宝说话突然结巴怎么办 小孩g和d不分怎么办 两岁宝宝皮肤黑怎么办 2岁宝宝肤色偏黄怎么办 2岁宝宝迷上手机怎么办 2岁宝宝说话口吃怎么办 两岁宝宝突然口吃怎么办 两岁半的宝宝还不会说话怎么办 2岁宝宝自闭症怎么办呀 新生儿又吐又拉怎么办 一岁多宝宝受凉呕吐拉稀怎么办 7个月的宝宝腹泻怎么办 两岁宝宝拉稀水怎么办 2岁宝宝发烧呕吐怎么办 1岁宝宝着凉呕吐怎么办