zoukankan      html  css  js  c++  java
  • STL之六:map/multimap用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8547007

    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()销毁所有元素,释放内存

    #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

    Map<int, string> mapStudent;
    mapStudent.insert(pair<int, string>(1, “student_one”));
    Map<int, string> mapStudent;
    mapStudent.insert(map<int, string>::value_type (1, “student_one”));

      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的元素

    #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<<'
    ';
    	}
    
    	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 :
    ";
    	for (it = mymap.begin();it!= mymap.end();it++)
    	{
    		cout<<it->first<<"=>"<<it->second<<'
    ';
    	}
    
    	cout<<"anothermap contains :
    ";
    	for (it = anothermap.begin();it!= anothermap.end();it++)
    	{
    		cout<<it->first<<"=>"<<it->second<<'
    ';
    	}
    	return 0;
    }

    上述代码运行结果为

    #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 :
    ";
    	for (it = mymap.begin();it!= mymap.end();it++)
    	{
    		cout<<it->first<<"=>"<<it->second<<'
    ';
    	}
    
    	it = mymap.find('b');
    	mymap.erase(it);
    
    	mymap.erase('c');
    
    	it = mymap.find('e');
    	mymap.erase(it,mymap.end());
    
    	cout<<"now mymap contains :
    ";
    	for (it = mymap.begin();it!= mymap.end();it++)
    	{
    		cout<<it->first<<"=>"<<it->second<<'
    ';
    	}
    
    	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类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。

  • 相关阅读:
    python3 基础数据类型之列表及其操作方法
    python3 逻辑运算符
    python3 内置函数
    python3 装饰器
    python3 变量作用域
    python3 参数以及函数的传参
    python3 函数基础
    洛谷P3379倍增LCA
    洛谷P3375KMP字符串匹配
    洛谷P2613有理数取余
  • 原文地址:https://www.cnblogs.com/shmilxu/p/4834616.html
Copyright © 2011-2022 走看看