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

2025-01-19 11:34:30
推荐回答(4个)
回答1:

template
void sort(comp cmpfn)

前面写错了,对不起了。

你改成l.sort(int node(const void *a,const void *b));
试试吧,sort函数不只是通过使用bool运算判断大小,它还有判断谁大谁小,int大于0就是a>b,反之就是a我帮你改写了一下你的node()
int node(const void *a,const void *b){
return *(int *)a - *(int *)b;
}

回答2:

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 
#include 
#include 
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());
p(a, a + 10);
sort(a, a + 10, less());
p(a, a + 10);
}

回答3:

templatecomp>
void
sort(comp
cmpfn)
前面写错了,对不起了。
你改成l.sort(int
node(const
void
*a,const
void
*b));
试试吧,sort函数不只是通过使用bool运算判断大小,它还有判断谁大谁小,int大于0就是a>b,反之就是a我帮你改写了一下你的node()
int
node(const
void
*a,const
void
*b){
return
*(int
*)a
-
*(int
*)b;
}

回答4:

templatecomp>
void
sort(comp
cmpfn)
前面写错


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

使用bool运算判断
判断谁

int
于0
a>b,反
aa==b;
我帮
改写
node()
int
node(const
void
*a,const
void
*b){
return
*(int
*)a
-
*(int
*)b;
}