構造体の配列があります。それを呼びましょうstructsarray
そして、私はintの配列を持っています。intはstuctのインデックスです。それを呼びましょうindexarray
並べ替えたいのですが、並べ替えをinindexarray
と比較したいint
structsarray
そのセットアップで実行できる方法はありますか?
次のような比較関数があります。
int my_compare(const void *a, const void *b)
{
int index1 = *((const int *) a);
int indexb = *((const int *) b);
return structsarray[index1].field - structsarray[index2].field;
}
引数は、並べ替えている配列内の値へのポインターです。定数 void ポインターを定数 int ポインターにキャストし、そのポインターを逆参照して実際の値を取得します。
独自の比較関数を実装することで、qsort を利用できます。ここで説明されています:http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
提供される情報は非常に限られています。次のようにできるかもしれません:
アルゴリズム例: バブルソート:
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (index[d] > index[d+1]) /* For decreasing order use < */
{
/* Sort index */
swap = index[d];
index[d] = index[d+1];
index[d+1] = swap;
/* Sort struct using above index */
swap = struct[d];
struct[d] = struct[d+1];
struct[d+1] = swap;
}
}
}