构建降序的set
来源:互联网 发布:云安全软件好用吗 编辑:程序博客网 时间:2024/06/17 04:24
前言
set是stl模板中可以实现数据自动排序的容器,默认的排序方式是从小到大的升序排序,如果想要降序排序应该怎么做呢?
在网站(http://www.cplusplus.com/reference/set/set/?kw=set)中查到如下说明:
template < class T, // set::key_type/value_type class Compare = less<T>, // set::key_compare/value_compare class Alloc = allocator<T> // set::allocator_type > class set;其中的各个参数为:
Aliased as member types set::key_type and set::value_type.
The set object uses this expression to determine both the order the elements follow in the container and whether two element keys are equivalent (by comparing them reflexively: they are equivalent if !comp(a,b) && !comp(b,a)). No two elements in a set container can be equivalent.
This can be a function pointer or a function object (see constructor for an example). This defaults to less<T>, which returns the same as applying the less-than operator (a<b).
Aliased as member types set::key_compare and set::value_compare.
Aliased as member type set::allocator_type.
思路
其中可以看到,第二个参数Compare决定了set容器比较两个元素顺序的结果,推测如果修改这个参数就应该可以修改set的排序方式。其默认值是为
class Compare = less<T>, // set::key_compare/value_compare在vs中通过f12定位到了less<T>:
位于xstddef.h的第186行:
// TEMPLATE STRUCT lesstemplate<class _Ty = void>struct less: public binary_function<_Ty, _Ty, bool>{// functor for operator<bool operator()(const _Ty& _Left, const _Ty& _Right) const{// apply operator< to operandsreturn (_Left < _Right);}};如果类似的构造一个more的结构体就可以实现set的降序了。
实现及验证
通过以下的代码验证:
#include <algorithm>#include <set>#include <iostream>using namespace std;// TEMPLATE STRUCT lesstemplate<class _Ty = void>struct more: public binary_function<_Ty, _Ty, bool>{// functor for operator<bool operator()(const _Ty& _Left, const _Ty& _Right) const{// apply operator< to operandsreturn (_Left > _Right);}};int main(){set<int, more<int>> ss;ss.insert(99);ss.insert(22);ss.insert(9);ss.insert(39);ss.insert(93);ss.insert(24);ss.insert(67);for each (int var in ss){cout << var << " ";}return 0;}输出的结果为:
99 93 67 39 24 22 9
如果将第20行改为
set<int, less<int>> ss;或
set<int> ss;得到的结果为:
9 22 24 39 67 93 99
以上结果证明修改的方法是可行的。
阅读全文
0 0
- 构建降序的set
- C++中set按降序排列方法。
- MYSQL的降序排列
- 索引的升序 降序
- JavaScript简单的升序降序
- 求整数的降序数
- 数据库的升序降序排列
- mysql的升序和降序
- 字符串的升序降序排列
- 关于索引的降序排列
- Python 使用有序list构建简单的set
- 实现对数组的降序排序
- java-Collections对象的降序排序--实例
- 输出大于3位数的降序数
- 芳芳的不下降序列
- lua中的table的升序和降序
- 数组,vector的sort快速降序方法
- java-Collections对象的降序排序--实例
- 基于易语言写QQ音乐播放器
- Largest Submatrix of All 1’s--(单调队列)
- 单链表的简单函数实现
- 【Python3.6爬虫学习记录】(四)爬取百度贴吧某帖子内容及图片
- HDU 1556-Color the ball(线段树区间更新)
- 构建降序的set
- 记一次springboot拦截器失效的调试
- noip 模拟赛(by azui大爷) day2 t2(附O(1)求RMQ)
- Java文件上传下载
- Python语法基础14.字符串
- 标志性log关键词
- R语言的基础函数操作
- 【CodeForces】616G
- hdu 3544 Alice's Game