zoukankan      html  css  js  c++  java
  • 组合使用容器可以获得比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;
    }
    此为其输出结果:

  • 相关阅读:
    悲观锁和乐观锁
    ClickOnce安装提示文件计算出的哈希值与清单中的指定值不同的解决办法
    DataView的toTable和Table
    DataTable中抽取Distinct数据
    CSTE学习网站
    我的SiteMap
    Typesetting Engine_Gecko
    VSTS使用Web测试
    创建Web 服务测试
    [ZZ]Browser Series_网页浏览器比较
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3864027.html
Copyright © 2011-2022 走看看