在类里面如何利用标准库的排序功能,我始终找不到好的方法,有高手能解决100送出
涉及的类
class Object
{
public;
Point pos();
void GetID();
……
……
private:
Point _pos;
int _id;
}
class go
{
public:
void SortByDistance(const Point& p);
private:
Object obj[5];
int SortedArray[5];
}
//实现部分 ------------------------------------------
// 这是个全局函数,没有问题
inline double dist(const Point& p1, const Point& p2)
{
sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}
// 问题就出在这个函数,这个函数不能写在类里面,而且目标点p没有定义
// 这里目标点p其实是下一个函数传进来的参数
// 这里的比较条件每次都不一定,下一次可能比较其他的内容,如何灵活的修改
bool u_greater(const Object* _left, const Object* _right)
{
return (dist(_left->pos(), p) < dist(_right->pos(), p));
}
inline void go::SortByDistance(const Point& p)
{
list<Object*> objlist;
objlist.push_back(&obj[4]);
objlist.push_back(&obj[1]);
objlist.push_back(&obj[2]);
objlist.push_back(&obj[0]);
objlist.push_back(&obj[3]);
homelist.sort(u_greater); // 这里有问题
for(int i = 0; i < 5; i++)
{
SortedPlayer[i] = (*objlist.begin())->GetID();
homelist.pop_front();
}
}
-------------------------------------------------------
u_greater有问题,得不到目标点p,而且比较条件太死板,不能灵活的修改
请问有哪位高手能解决这个问题,小弟不甚感激