本文共 1173 字,大约阅读时间需要 3 分钟。
在STL中,greater和less是两个常用的比较仿函数,它们用于定义自定义的比较操作符。greater定义了从大到小的比较,而less定义了从小到大的比较。
templatestruct 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。
templatestruct 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()函数时,若希望按从大到小排序,可以将比较函数设置为greater:
sort(v.begin(), v.end(), greater ());
而若希望保持默认的从小到大排序,则直接使用less:
sort(v.begin(), v.end(), less ());
需要注意的是,priority_queue的默认比较行为是从大到小,这与less的顺序相反。如果希望priority_queue按从小到大排列,则需要手动指定比较函数为less:
priority_queue
而如果希望按从小到大排列,则需要改为:
priority_queue
这两种仿函数为STL函数库提供了灵活的比较机制,能够满足不同场景下的排序需求。
转载地址:http://qrki.baihongyu.com/