-2

構造体の配列があります。それを呼びましょうstructsarray

そして、私はintの配列を持っています。intはstuctのインデックスです。それを呼びましょうindexarray

並べ替えたいのですが、並べ替えをinindexarrayと比較したいintstructsarray

そのセットアップで実行できる方法はありますか?

4

3 に答える 3

3

次のような比較関数があります。

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 ポインターにキャストし、そのポインターを逆参照して実際の値を取得します。

于 2012-11-23T13:03:27.767 に答える
2

独自の比較関数を実装することで、qsort を利用できます。ここで説明されています:http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

于 2012-11-23T13:03:08.823 に答える
0

提供される情報は非常に限られています。次のようにできるかもしれません:

アルゴリズム例: バブルソート:

  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;

      }
    }
  }
于 2012-11-23T13:09:43.340 に答える