1

私は現在、intのリストを受け入れてそれらから配列を作成し、それらをソートして、ソートされた配列を出力するmergesortを持っています。現在、すべてのコードは 1 つの .cpp ファイルにあります。

ユーザー定義オブジェクトの配列をソートしたい人にコードを提供する良い方法は何ですか?

私の本能は、仮想メソッドのみのファイル (インターフェイス) を提供し、ユーザーが比較演算子と読み取り/書き込みメソッドをオーバーライドすることを要求することです。

配列から離れて、リンクされたリストを使用するのが最善でしょうか?

これがあまりにも漠然としている/主観的である場合は、私を平手打ちして閉じてください。自分の考えを超えたアイデアが欲しかっただけです。

4

3 に答える 3

3

テンプレートを使用して並べ替えを実装し、オブジェクトの配列の代わりにポインター配列を使用して、比較を実装するファンクターを要求し、<演算子を使用して比較を行うデフォルトのファンクターを提供します。

于 2013-02-21T07:38:17.227 に答える
1

これは、標準ライブラリを使用して行う方法です。

顧客が独自のタイプを持っている場合は、operator<並べ替えと次operator<<への出力を定義する必要がありostreamます。

class Type {
    //...
};

bool operator<(const Type& lhs, const Type& rhs) {
    //...
}

ostream& operator<<(ostream& os, const Type& object) {
    //...
}

vector<Type> originals;
vector<Type> values = originals;

stable_sort(values.begin(), values.end());
copy(values.begin(), values.end(),
     ostream_iterator<Type>(cout, "\n"));

あなたの顧客は、このようにしない十分な理由を持っている必要があります.

于 2013-02-21T08:10:48.760 に答える
0

いいえ、連結リストは必要ありません。

ファンクターをあまり掘り下げない最も簡単な解決策:

template <class T, int size>
class MergeSort
{
   T* arr[size];

   MergeSort(T* array[size])
   {
     // ...
   }

   void Sort()
   {
      // The rest is simple...
   }
};
于 2013-02-21T07:50:54.130 に答える