使用stl的sort给对象排序的问题

就是把几个point类的对象,放进一个list里,然后再利用sort和自定义的函数对象MyComparator排序。不知道为什么,在Dev—C++4和VC6下都无法编译通... 就是把几个point类的对象,放进一个list里,然后再利用sort和自定义的函数对象MyComparator排序。不知道为什么,在Dev—C++4和VC6下都无法编译通过。
大家帮帮忙看下是怎么回事,谢谢了!

代码如下:

#include <list>
#include <iostream>
#include <functional>
#include <algorithm>

class point
{
public:
int x;
int y;
point(int x,int y);
~point();
};
point::point(int x,int y)
:x(x),y(y)
{}
point::~point()
{}

template<typename T>
void printtest(T i)
{
std::cout<<(i->x)<<","<<(i->y)<<" ";
}

bool MyComparator(const point* a,const point* b)
{
return ((a->x) >(b->x))?true:false;
}

int main()
{
std::list<point*> j_list;
point p1(0,1);
point p2(9,2);
point p3(0,1);
point p4(8,2);
point p5(0,1);
point p6(0,2);
point p7(56,1);
point p8(0,2);
point* pp1=&p1;
point* pp2=&p2;
point* pp3=&p3;
point* pp4=&p4;
point* pp5=&p5;
point* pp6=&p6;
point* pp7=&p7;
point* pp8=&p8;
j_list.push_back(pp1);
j_list.push_back(pp2);
j_list.push_back(pp3);
j_list.push_back(pp4);
j_list.push_back(pp5);
j_list.push_back(pp6);
j_list.push_back(pp7);
j_list.push_back(pp8);
j_list.remove(pp1);

std::for_each(j_list.begin(),j_list.end(),printtest<point*>);
std::cout<<std::endl;
std::sort( j_list.begin(),j_list.end(),MyComparator );
std::for_each(j_list.begin(),j_list.end(),printtest<point*>);
std::cout<<std::endl;

system("pause");
return 0;
}
展开
 我来答
花式码农
2008-04-25 · TA获得超过1.7万个赞
知道大有可为答主
回答量:4894
采纳率:0%
帮助的人:4742万
展开全部
因为sort需要++,--这样的操作,而list容器不具备这个。
所以你只需要把用到list的地方替换成vector即可。
用erase( remove() );这种方式代替list::remove();

return (a->x) >(b->x) ;
这里这样即可,你不觉得你的写法有点多余吗?

#include <vector>
#include <iostream>
#include <functional>
#include <algorithm>

class point
{
public:
int x;
int y;
point(int x,int y);
~point();
};
point::point(int x,int y)
:x(x),y(y)
{}
point::~point()
{}

template<typename T>
void printtest(T i)
{
std::cout<<( i->x)<<","<<(i->y)<<" ";
}

bool MyComparator(const point* a,const point* b)
{
return (a->x) >(b->x) ;
}

int main()
{
std::vector<point*> j_vector;
point p1(0,1);
point p2(9,2);
point p3(0,1);
point p4(8,2);
point p5(0,1);
point p6(0,2);
point p7(56,1);
point p8(0,2);
point* pp1=&p1;
point* pp2=&p2;
point* pp3=&p3;
point* pp4=&p4;
point* pp5=&p5;
point* pp6=&p6;
point* pp7=&p7;
point* pp8=&p8;
j_vector.push_back(pp1);
j_vector.push_back(pp2);
j_vector.push_back(pp3);
j_vector.push_back(pp4);
j_vector.push_back(pp5);
j_vector.push_back(pp6);
j_vector.push_back(pp7);
j_vector.push_back(pp8);

std::for_each(j_vector.begin(),j_vector.end(),printtest<point*>);
std::cout<<std::endl;
std::sort( j_vector.begin(),j_vector.end(),MyComparator );
std::for_each(j_vector.begin(),j_vector.end(),printtest<point*>);
std::cout<<std::endl;

system("pause");
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式