c++对map进行排序
来源:互联网 发布:旅行社信息管理数据库 编辑:程序博客网 时间:2024/04/28 22:14
原文地址:http://blog.csdn.net/jiejinquanil/article/details/51544145
最近在PAT刷题,其中一道题月饼 (25)需要用到对价格进行排序,但是排序后要用到价格对应的总售价。因而可以考虑用关联容器进行求解,map是比较合适这题的数据结构。
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。关于map的详细定义及用法可以见C++STL之map学习。假如存储学生和其成绩,我们用map来进行存储就是个不错的选择。 我们这样定义map<string, int>,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。我们可以根据学生姓名快速的查找到他的成绩。另一方面,如果我们想把所有同学和他相应的成绩都输出来,并且按照我们想要的顺序进行输出:比如按照学生姓名的顺序进行输出,或者按照学生成绩的高低进行输出。换句话说,我们希望能够对map进行按Key排序或按Value排序。本文对这两种排序进行一个简单的总结。
一、按Key排序
我们知道,map内部本身就是按序存储的(比如红黑树),这样方便实现快速查找。在我们插入<key, value>键值对时,map就会自动按照key的大小顺序进行存储。因而作为key的类型必须能够进行大小运算的比较。比如int、double、string、char等类型。以月饼 (25)这一题为背景例子进行编程说明。
结果如下:
从结果可以看到未对map进行任何操作,它按照Key值自动进行了排序。
具体到月饼 (25)这一题上,详细分析可以见另外一篇博客PAT上面一道关于“月饼”的题目的解法。
另举一例进行说明:
结果如下:
上面的按key值排序有个缺点:即当插入的有多个相等的值时,由于key的唯一性,会只保留一个。因此月饼 (25)这一题不适合用按key进行排序求解(因为不排斥某两种月饼的价格相等)。
二、按Value排序
如何实现Map的按Value排序呢?
第一反应是利用STL中提供的sort算法实现,这个想法是好的,不幸的是,sort算法有个限制,利用sort算法只能对序列容器进行排序,就是线性的(如vector,list,deque)。map是一个集合容器,它里面存储的元素是pair,但是它不是线性存储的(像红黑树),所以利用sort不能直接和map结合进行排序。因而可以采用一些其它的思路,总结如下:
思路1:可以考虑将value作为key值进行自动排序。
思路2:可以把map中的key值和value值分别转存到一个pair类型的vector中,在对vector按照一定的规则排序即可。这样的方法对值一样的情况也能够使用。具体代码如下:
结果如下:
参考资料
C++ STL中Map的按Key排序和按Value排序
C++STL之map学习
STL中map按值(value)排序
对map集合进行排序
STL容器(三)——对map排序
如何禁止STL map 自动排序
- 对Map进行排序
- java 对map进行排序
- 对map键值进行排序
- Map对value进行排序
- 对List<Map>进行排序
- c++对map进行排序
- 对map集合进行排序
- 对map集合进行排序
- 对map集合进行排序
- 对map集合进行排序
- 对map集合进行排序
- c++对map进行排序
- 对map集合进行排序
- 对map集合进行排序
- 对map集合进行排序
- Map 关于按对value进行排序
- 根据value字段对map进行排序
- 对Map按value进行排序
- MFC对话框框架详解
- 一种高效的寻路算法
- java动态代理总结(狗星例子)
- 获取URL指定的资源
- iOS引入JavaScriptCore引擎框架
- c++对map进行排序
- 线程wait-notify-notifyAll
- 设计模式总结
- C指针与const的那些事
- Android_IPC机制
- 代理模式:Proxy模式
- 组合模式:Composite模式
- 177本名著浓缩成了177句话
- 【Linux】Centos6.8安装Redis