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

    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<<'\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;
}

上述代碼運行結果爲
#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類中,可以以數組的形式給映射添加鍵-值對,並可返回值的引用。


發佈了4 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章