组合使用容器可以获得比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 。
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
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; }此为其输出结果:
相关文章推荐
- Struts2: 使用s:iterator标记输出Map、List、Array容器组合的数据结构
- PageAdmin V2.1 20100101版本已发布,请更新到最新版本使用更多功能。
- PHP中功能强大却少使用的函数 -- 为你提供更多的思路
- AgileEAS.NET SOA 中间件Web运行容器管理功能已全部开源,欢迎大家下载、使用、反馈
- 使用jquery+css实现更多+收起的功能
- 使用Ajax实现动态双组合功能(asp.net)
- Android 仿美团网,探索使用ViewPager+GridView实现左右滑动查看更多分类的功能
- Collections:给集合操作提供了更多的功能和Arraylist使用方法
- 使用multimap创建重复键关联容器
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- PHP中功能强大却少使用的函数 -- 为你提供更多的思路
- Android_Listview中使用线程实现无限加载更多项目的功能
- Listview中使用线程实现无限加载更多项目的功能
- 由群发短信功能学习:CheckBox和ListView组合使用的方法和注意事项.
- 使用git的分支功能实现定制功能摘取与组合的想法
- STL容器使用DEMO-multimap
- ckeditor组合ckfinder的配置使用图片上传功能
- 使用avalon实现SKU组合查询功能
- Swift学习笔记(十七)——导入Foundation使用更多字符串功能
- 使用Angularjs、jQuery在手机上实现滑动条到底自动加载更多功能