c++ STL中的list容器用sort排序是,如何自定义比较

list提够了sort函数,但如果想自己定义大小的比较,该怎样写呢?如下程序为什么不可以呢?structnode{booloperator()(constint&i,co... list提够了sort 函数,但 如果想自己定义大小的比较,该怎样写呢?
如下程序为什么不可以呢?
struct node

{

bool operator () (const int & i,const int & j)

{

return i<j;

}

};

list<int> l;
//在此向l 中插入一些元素
l.sort(node( ));
展开
 我来答
domo5231
推荐于2017-11-26 · TA获得超过904个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:132万
展开全部
template<class comp>
void sort(comp cmpfn)

前面写错了,对不起了。

你改成l.sort(int node(const void *a,const void *b));
试试吧,sort函数不只是通过使用bool运算判断大小,它还有判断谁大谁小,int大于0就是a>b,反之就是a<b,等于0就是a==b;
我帮你改写了一下你的node()
int node(const void *a,const void *b){
return *(int *)a - *(int *)b;
}
tattackor
2015-10-29 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:885万
展开全部

1、sort函数的原型之一是:
void sort( iterator start, iterator end, Comp cmp );
其中cmp可以是自定义的函数,按照您指定的规则用于比较迭代器对应的元素的大小。
那么这里的cmp是一个结构体(或者说类)。该类定义了一个调用操作符(就是operator()啦),调用操作符接受两个Node类型对象为参数,返回一个bool值。
那么cmp()是什么呢?它在执行时将创建一个cmp类的临时对象,使用该临时对象调用operator()来比较两个Node对象的大小。
比如比较Node[i]和Node[j],那么cmp()比较它们之间的大小等价于:
cmp ctemp;
temp.operator(Node[i], Node[j])返回一个bool值。
所以说cmp()等价于一个函数对象。

2、例程:

#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
bool sort_desc(int a, int b)
{
return a > b;
}
bool sort_asc(int a, int b)
{
return a < b;
}
void p(int* begin, int* end)
{
while(begin < end)
cout << *begin++ << ' ';
cout << endl;
}
int main()
{
int a[] = {6,9,1,3,5,2,7,0,4,8};
sort(a, a + 10, sort_desc);
p(a, a + 10);
sort(a, a + 10, sort_asc);
p(a, a + 10);
sort(a, a + 10, greater<int>());
p(a, a + 10);
sort(a, a + 10, less<int>());
p(a, a + 10);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吾驹曹易云
2020-06-18 · TA获得超过3849个赞
知道大有可为答主
回答量:3160
采纳率:34%
帮助的人:194万
展开全部
template<class
comp>
void
sort(comp
cmpfn)
前面写错了,对不起了。
你改成l.sort(int
node(const
void
*a,const
void
*b));
试试吧,sort函数不只是通过使用bool运算判断大小,它还有判断谁大谁小,int大于0就是a>b,反之就是a<b,等于0就是a==b;
我帮你改写了一下你的node()
int
node(const
void
*a,const
void
*b){
return
*(int
*)a
-
*(int
*)b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a93522e3fd4
2020-02-05 · TA获得超过3722个赞
知道大有可为答主
回答量:3155
采纳率:32%
帮助的人:163万
展开全部
template<class
comp>
void
sort(comp
cmpfn)
前面写错


l.sort(int
node(const
void
*a,const
void
*b));
试试吧
sort函数

使用bool运算判断
判断谁

int
于0
a>b,反
a<b,等于0
a==b;
我帮
改写
node()
int
node(const
void
*a,const
void
*b){
return
*(int
*)a
-
*(int
*)b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式