首页 > 学院 > 开发设计 > 正文

STL:map/multimap用法详解

2019-11-06 07:13:52
字体:
来源:转载
供稿:网友

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 plain copy#include "stdafx.h"  #include <iostream>  #include <map>    using namespace std;    bool fncomp (char lhs, char rhs) {return lhs<rhs;}    struct classcomp {      bool Operator() (const char& lhs, const char& rhs) const      {return lhs<rhs;}  };    int main ()  {      map<char,int> first;        first['a']=10;      first['b']=30;      first['c']=50;      first['d']=70;        map<char,int> second (first.begin(),first.end());        map<char,int> third (second);        map<char,int,classcomp> fourth;                 // class as Compare        bool(*fn_pt)(char,char) = fncomp;      map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare        return 0;  }  

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 plain copy#include "stdafx.h"  #include <iostream>  #include <map>    using namespace std;      int main ()  {      map<char,int> mymap;        mymap.insert(pair<char,int>('a',10));      mymap.insert(pair<char,int>('z',200));        pair<map<char,int>::iterator,bool> ret;      ret = mymap.insert(pair<char,int>('z',500));      if (ret.second == false)      {          cout<<"element 'z' already existed";          cout<<"with a value of "<<ret.first->second<<'/n';      }        map<char,int>::iterator it = mymap.begin();      mymap.insert(it,pair<char,int>('b',300));      mymap.insert(it,pair<char,int>('c',400));        map<char,int> anothermap;      anothermap.insert(mymap.begin(),mymap.find('c'));        cout<<"mymap contains :/n";      for (it = mymap.begin();it!= mymap.end();it++)      {          cout<<it->first<<"=>"<<it->second<<'/n';      }        cout<<"anothermap contains :/n";      for (it = anothermap.begin();it!= anothermap.end();it++)      {          cout<<it->first<<"=>"<<it->second<<'/n';      }      return 0;  }  上述代码运行结果为

[cpp] view plain copy#include "stdafx.h"  #include <iostream>  #include <map>    using namespace std;      int main ()  {      map<char,int> mymap;      map<char,int>::iterator it;            mymap['a'] = 10;      mymap['b'] = 20;      mymap['c'] = 30;      mymap['d'] = 40;      mymap['e'] = 50;      mymap.insert(pair<char,int>('f',60));        cout<<"initial mymap contains :/n";      for (it = mymap.begin();it!= mymap.end();it++)      {          cout<<it->first<<"=>"<<it->second<<'/n';      }        it = mymap.find('b');      mymap.erase(it);        mymap.erase('c');        it = mymap.find('e');      mymap.erase(it,mymap.end());        cout<<"now mymap contains :/n";      for (it = mymap.begin();it!= mymap.end();it++)      {          cout<<it->first<<"=>"<<it->second<<'/n';      }        return 0;  }  上述代码运行结果为:

如果想往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类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表