博客
关于我
c++之greater和less在stl中运用
阅读量:195 次
发布时间:2019-02-28

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

greater和less:STL中的比较仿函数

在STL中,greaterless是两个常用的比较仿函数,它们用于定义自定义的比较操作符。greater定义了从大到小的比较,而less定义了从小到大的比较。

greater的定义

template
struct greater : public binary_function<_Tp, _Tp, bool> { bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }};

这意味着当使用greater作为比较函数时,会将元素按照从大到小的顺序进行排序。例如,对于序列1, 2, 4, 7, 15, 34,使用greater<int>()进行排序后,顺序会变成1 > 2 > 4 > 7 > 15 > 34

less的定义

template
struct less : public binary_function<_Tp, _Tp, bool> { bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }};

less的作用与greater相反,它定义了从小到大的比较。在默认情况下,STL中的sort(), lower_bound()upper_bound()都使用less进行比较,按从小到大的顺序排列元素。

在使用sort时的应用

在使用sort()函数时,若希望按从大到小排序,可以将比较函数设置为greater

sort(v.begin(), v.end(), greater
());

而若希望保持默认的从小到大排序,则直接使用less

sort(v.begin(), v.end(), less
());

priority_queue的特殊性

需要注意的是,priority_queue的默认比较行为是从大到小,这与less的顺序相反。如果希望priority_queue按从小到大排列,则需要手动指定比较函数为less

priority_queue
, greater
> q;// 这里使用了`greater
`,因此q的元素会按从大到小排列

而如果希望按从小到大排列,则需要改为:

priority_queue
, less
> q;

这两种仿函数为STL函数库提供了灵活的比较机制,能够满足不同场景下的排序需求。

转载地址:http://qrki.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>
Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
Openlayers:DMS-DD坐标形式互相转换
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
Openmax IL (二)Android多媒体编解码Component
查看>>
OpenMCU(一):STM32F407 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>