您的位置:首页 > 其它

组合使用容器可以获得比multimap更多的功能

2014-07-09 11:40 337 查看
预备知识: map/multimap和set容器均会对键key进行排序。

1. multimap的一个键可以对应多个value,但是此value是不进行排序的。

multimap<int,int>中, 针对相同的key=1,添加1,2,3,1,1,1,1后,不进行排序,输出时为:1,2,3,1,1,1,1 。

#include <iostream>
#include <map>

using namespace std;

int main(){
	multimap<int,int>iimm;
	int key,value;
	value=1;

	iimm.insert(make_pair(1,value));
	

	++value;
	iimm.insert(make_pair(1,value));
	
	++value;
	iimm.insert(make_pair(1,value));

	value=1;
	iimm.insert(make_pair(1,value));
	iimm.insert(make_pair(1,value));
	iimm.insert(make_pair(1,value));
	iimm.insert(make_pair(1,value));

	typedef multimap<int,int>::iterator Iter;

	Iter begin=iimm.lower_bound(1);
	Iter end=iimm.upper_bound(1);
	

	while(begin!=end){
		cout<< begin->second <<endl;
		++begin;
	}

	return 0;
}
此为输出结果:



2. 既然set容器可以对键值进行排序,那么如果使用map<int, set<int> > ,用value作为set的键值,就可以对value进行排序了

map<int,set<int>>中, 针对相同的key=1,每个value只可以添加一次,但是每个value是有序的,即 只有 1,2,3。

3. set<int> 每个value出现一次,不能完全反应输入结果,因此可以使用map<int,multiset<int>>

map<int,multiset<int>>,针对相同的key=1,每个value可以添加多次,且是已经排好序的:1,1,1,1,1,2,3

#include<iostream>
#include<map>
#include<set>

using namespace std;

int main(){
	map<int,multiset<int> > m;
	int value;

	//	对map容器中key=1是的multiset<int> 进行插入	
	value=1;
	m[1].insert(value);
	
	++value;
	m[1].insert(value);
	
	++value;
	m[1].insert(value);

	value=1;
	m[1].insert(value);
	m[1].insert(value);
	m[1].insert(value);
	m[1].insert(value);

	typedef map<int, multiset<int> >::iterator  Iter;
	
	Iter iter=m.find(1);//找到 key=1时第一个迭代器——注意:此迭代器为pair类型,first代表键值,second代表multiset<int>

	if(iter!=m.end()){//如果该键存在,则只需对iter->second (即multiset<int>容器)进行读取,即可获得sorted value

		multiset<int>::iterator iter2;

		iter2=iter->second.begin();//<==> iter2= (iter->second).begin();

		while(iter2!=iter->second.end()){
			cout<< *iter2<<endl;
			++iter2;
		}
	
	}

	return 0;
}
此为其输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐