如何使用std::sort按x坐标对结构进行排序

how can i sort my struct by x coordinate using std::sort

本文关键字:结构 坐标 排序 何使用 std sort      更新时间:2023-10-16

这里是我的结构:

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

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

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

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

此外,您对std::sort的呼叫不正确。假设pontokN大小的点阵列,则需要执行以下操作:

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

std::sort采用一个迭代器范围,该范围指向要排序的序列的开始和结束。

当X坐标相等时,sorter函数似乎什么都不返回,这就是你的意思吗?!

它可能很简单:

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