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;
}
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);
}
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;
}
template
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;
}