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

そして私は私のポンタイプのポントクを埋めます:

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サイズのポイントの配列であると仮定すると、次のNことを行う必要があります。

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

std::sortソートするシーケンスの開始と終了を指すイテレータ範囲を取ります。配列の2つの要素を渡していました。

于 2013-02-27T00:15:18.587 に答える
1

sorterX座標が等しい場合、関数は何も返さないように見えますが、それはあなたが意味したことですか?!

それは単純かもしれません:

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