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

预备知识: 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;
}
此为其输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值