0

Cellたとえば、次の関数に従って並べ替えたいclass がある場合(ここでxはアクセサーを持つメンバー変数):yint

bool sortByCoordinates(const Cell& c1, const Cell& c2) {
    return c1.getX() < c2.getX() || (c1.getX() == c2.getX() && c1.getY() < c2.getY());
}

次のような関数で使用できるように、この関数を配置するのに最適な場所はどこstd::sortですか?

Cell例では、必要な場所の上にメソッドがソース ファイルに浮かんでいるだけですが、実際にはクラスに関連付けたままにしたいと考えています。をオーバーライドできることはわかっていますが、operator<ソートしたい他のソート方法があるかもしれませんCell。とにかく、コードを明確にするために演算子をオーバーライドすることはあまり好きではありません。

現時点ではstatic、ファイルのメソッドとして持っているCell.hので、次のようにソートするときに呼び出すことができます。

std::sort(cells.begin(), cells.end(), Cell::sortByCoordinates);

これは、複数の (または単一の) カスタム ソート関数のベスト プラクティスであり、ヘッダー ファイルはそれらの適切な場所ですか? そうでない場合、何ですか?

4

1 に答える 1

1

あなたが説明した方法でそれを行うことは合理的です。inlineまた、パフォーマンスを重視する場合は (.cpp ファイルで定義するのではなく)、ヘッダー自体で比較関数を定義することをお勧めします。

個人的にはあなたとは好みが違います。この合理的なデフォルトの比較関数は、名前空間スコープ (つまり、クラスのすぐ下) で宣言します。これは、書かれているように、クラス メンバーへの特権アクセスを必要としないためです。そして、私はそれを次のように宣言しoperator <ます。合理的なデフォルトの順序付けのように見える場合、1 つの関数を「特別」にするという点で恥ずかしいことは何もないと思います。

于 2014-03-15T01:10:37.700 に答える