0

这是我的结构:

class Pont{

private:

    int x, y;
public:

    Pont( int x=0, int y=0);
    int getX() const;
    int getY() const;
    void setX( int x );
    void setY( int y );
    void move( int nx, int ny);
};

我填写了我的 Pont 类型 pontok :

while(n < N){

        int x=(rand()%2000);
        int y=(rand()%2000);
        Pont p(x,y);
        if(!letezike(p,n)){
            pontok[n]=p;
            ++n;
        }

我试过这个:

bool sorter(Pont const& lhs, Pont const& rhs) {

   if (lhs.getX() != rhs.getX())
        return lhs.getX() < rhs.getX();
}

std::sort(pontok[0], pontok[N], &sorter);
4

2 回答 2

3

删除该!=检查。如果x值相等,它会为您的程序提供未定义的行为,因为该函数不会到达return语句。

bool sorter(Pont const& lhs, Pont const& rhs) {
    return lhs.getX() < rhs.getX();
}

如果x值相等,这将返回false,就像它应该做的那样。

此外,您的呼叫std::sort不正确。假设pontok是一个 size 点数组N,您需要执行以下操作:

std::sort(pontok, pontok + N, &sorter);

std::sort接受一个迭代器范围,该范围指向要排序的序列的开头和结尾。您传入了数组的两个元素。

于 2013-02-27T00:15:18.587 回答
1

sorter当 X 坐标相等时,您的函数似乎没有返回任何内容,这是您的意思吗?!

可能很简单:

bool sorter(Pont const& lhs, Pont const& rhs) {
   return lhs.getX() < rhs.getX();
}
于 2013-02-27T00:17:22.543 回答