2017-01-24 8 views
1

与えられた座標iCenter,jCenter。この座標に最も近いCoordinateはリストcoordinatesの最初の位置になければなりません。 Furterhmoreは、私は私の問題は私のoperator()iCenter,jCenter座標知っている必要があるということである次のような構造比較関数に追加の引数を指定してリストをソート

struct ComparatorForCoordinate { 
    bool operator() (const shared_ptr<Coordinate>& c1, const shared_ptr<Coordinate>& c2) { 
    // return distance(c1 to center) > distance(c2 to center) 
    } 
}; 

// sorting: 
coordinates.sort(ComparatorForCoordinate()); 

を使用します。これら2つのdouble値を比較関数にどのように渡すことができますか?オペレータにさらに2つのダブル・パラメータが中央位置にあるようにする単純な試みは機能しませんでした。それがうまくいく場合には、このコールは私にとって素晴らしいことだ:

coordinates.sort(ComparatorForCoordinate(iCenter,jCenter)); 
+0

私はそのタイトルを微調整し、STLのタグを追加し、期待してきました他のユーザーがこの質問(および回答)を見つけやすくなります。変更が気に入らない場合は、元に戻してください。 –

答えて

3

あなたのコンパレータに状態を追加することができます。

struct ComparatorForCoordinate { 
    ComparatorForCoordinate(Coordinate center) : _center(center) {} 

    bool operator() (const shared_ptr<Coordinate>& c1, const shared_ptr<Coordinate>& c2) const { 
    return distance(c1, _center) > distance(c2, _center); 
    } 

private: 
    Coordinate _center; 
}; 

// sorting: 
coordinates.sort(ComparatorForCoordinate(center)); 
+0

これはうまくいきました。ユークリッド距離に従った1つのソーティングと、「i」値の間の距離に従ったソートだけを行う。私は2つの 'structs'をComparatorとして必要とするのでしょうか、あるいはこれらの2つの比較関数を同じ構造体に入れることができますか? – Kapa11

+0

@ Kapa11: 'bool euclidean'引数をコンパレータコンストラクタに追加し、比較のたびにチェックします。しかし、別のコンパレータを書く方が効率的で慣用的です。 –

+0

ありがとう、それは私が検索したものです:) – Kapa11

関連する問題