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( )); 展开
如下程序为什么不可以呢?
struct node
{
bool operator () (const int & i,const int & j)
{
return i<j;
}
};
list<int> l;
//在此向l 中插入一些元素
l.sort(node( )); 展开
4个回答
展开全部
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;
}
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;
}
展开全部
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询