博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
map的排序
阅读量:5038 次
发布时间:2019-06-12

本文共 1642 字,大约阅读时间需要 5 分钟。

1.按key值排序

(第一个值,即<key,value>中的key值)
为了实现快速查找,map内部本身就是按序存储的(比如红黑树)。在我们插入<key, value>键值对时,就会按照key的大小顺序进行存储,其中key的类型必须能够进行 < 运算,且唯一,默认排序是按照从小到大便于记忆,可以联想到需要支持小于运算。
map的模板定义如下

template < class Key, class T, class Compare = less
, class Allocator = allocator
> > class map;

其中第三、四个均包含默认参数,可以不指定。我们可以通过指定Compare类来指定排序的顺序。其中less是stl里面的一个函数对象(即调用操作符的类,其对象常称为函数对象(function object),它们是行为类似函数的对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类,其实质是对operator()操作符的重载)其具体定义如下

template 
struct less : binary_function
{ bool operator() (const T& x, const T& y) const {return x

它是一个带模板的struct,里面仅仅对()运算符进行了重载。与less相对的有greater,定义如下

template 
struct greater : binary_function
{ bool operator() (const T& x, const T& y) const {return x>y;} };

因此我们在定义map的时候,可以指定如下

map<string,int,greater >
或者定义自己的比较类comLen如下

struct comLen{     bool operator(const string &lhs, const string &rhs)     {return lhs.length()
LenLessMap;

2.按value值排序

因为map不能用sort排序,所以先把map里的pair存到vector里,再用sort对vector排序,此时map里的顺序没变,要用vector才行。

bool cmp(const pair
& x, const pair
& y) { return x.second > y.second; } void sortMapByValue(map
& tMap,vector
>& tVector) { for (map
::iterator curr = tMap.begin(); curr != tMap.end(); curr++) tVector.push_back(make_pair(curr->first, curr->second)); sort(tVector.begin(), tVector.end(), cmp); }

参考博客:

转载于:https://www.cnblogs.com/qinjames/p/10554944.html

你可能感兴趣的文章
爬虫基础
查看>>
jquery.lazyload延迟加载图片第一屏问题
查看>>
HDU 1011 Starship Troopers (树形DP)
查看>>
手把手教你写DI_1_DI框架有什么?
查看>>
.net常见的一些面试题
查看>>
OGRE 源码编译方法
查看>>
上周热点回顾(10.20-10.26)
查看>>
C#正则表达式引发的CPU跑高问题以及解决方法
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了...
查看>>
APScheduler调度器
查看>>
设计模式——原型模式
查看>>
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
查看>>
如何一个pdf文件拆分为若干个pdf文件
查看>>
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>