• ベストアンサー

添字の対応関係を維持したい

a[0][0]=100, a[1][0]=30, a[2][0]=50, a[0][1]=200 a[1][1]=20, a[2][1]=10, a[0][2]=110, a[1][2]=60, a[2][2]=80となっていた場合に、これをソートして、 b[0][0]=10, b[1][0]=20, b[2][0]=30, b[0][1]=50 b[1][1]=60, b[2][1]=80, b[0][2]=100, b[1][2]=110, b[2][2]=200、としたとします。 ある規則で配列bの値をいじるのですが、その後に、 元の並びに戻したいです。 b[0][2]の値はa[0][0]へ、b[2][0]の値はa[1][0]へ、 といったように、添字の対応関係を維持したいということです。 ソートの方法は結構です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

添字の対応関係を例えばc1[n][n],c2[n][n]で持っておけばいいように思います。 ソートの時にc1とc2を作っておけば、 a[i][j]=b[c1[i][j]][c2[i][j]] で戻せますね。

manky1225
質問者

お礼

2次元配列だとこんがらがるので、1次元にしてからソートして、また、2次元に戻すことにしました。 添字用の配列を作って、ソートで入れ替えたときに、添字も入れ替えて保存することでうまくいきました。 参考になりました。ありがとうございます。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

struct b { int value; int dim1; int dim2; } b[9]; とでもしておけば、 b[0].value=a[0][0]; b[0].dim1=0; b[0].dim2=0; b[1].value=a[1][0]; b[1].dim1=1; b[1].dim2=0; として、ソートして値の変更をして a[b[1].dim1][b[1].dim2]=b[1].value; として戻せます。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

>ある規則で配列bの値をいじるのですが、その後に、 >元の並びに戻したいです。 配列bをいじる前に、配列b全体を配列xにバックアップしておけば、良いと思いますが。 もとに戻すときは、配列xを配列bに移送すれば戻ります。もちろん、配列bと配列xの要素の数は、一致させておきます。

manky1225
質問者

補足

説明が下手だったかもしれませんが、配列bの値自体はどうでもよく、ソートして並び変えた順番をまた元の順番に戻したいのです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

このままでは、無理です。 bを構造体にでもして、 元のデータ位置を記憶しておくしかないとないと思います。

manky1225
質問者

補足

bは構造体でも何でもいいです。作業場所に過ぎませんから。