• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:構造体配列の並べ替え)

構造体配列の並べ替え

このQ&Aのポイント
  • VB6で構造体の配列をソートする方法について教えてください。
  • 構造体配列をソートする際、体重だけをソートするのか、構造体ごとソートするのか教えてください。
  • VB6で構造体配列をソートする際の考え方について教えてください。

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

  • ベストアンサー
  • tkrn
  • ベストアンサー率53% (33/62)
回答No.2

#1です。 回答になっていませんでしたね。 > 何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。 はい、この場合体重だけソートされます。 なので#1のヒントになります。 > 前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。 がんばってください。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

ソートでは、一部のメンバー(ソートキーの場合)で大小比較をして、データを序列を反映して、移す(ポインタで処理しないとき)ときは、全メンバーを移すのが鉄則です。 そのとき代入を   構造体名.メンバーA=構造体。メンバーX   構造体名.メンバーB=構造体。メンバーY   構造体名.メンバーC=構造体。メンバーZ ・・ のようにしなくてはならないのか、   構造体名=構造体名 ができるかを質問しているのでしょうが、 http://www.geocities.co.jp/SiliconValley-Bay/7437/c/c6.htm に見つけましたが、昔は 「構造体をまるごと(全メンバーのデータ)を、一度に同じ型の構造体に代入することはできない。」言語仕様の例があったようです。 しかし >最近の多くのC言語ではその制約がなくなっていますが。・・ でC言語に限らず可能と思います。 心配なら、その使う言語で、数行のプログラムを書いてテストしてみると良いと思います。 昔、(構造体の起源らしい)PLIでも、これができて、これは良い・便利、と思った記憶があります。 http://www.lbm.go.jp/toda/comp/corigin.html http://www.shoeisha.com/book/pc/20c/chap05/gen.htm こんな記事もありました。 コードがすっきりしますね。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

要はどのように作るかと言うことでしょうが 通常は Type Profile   名前 As String   身長 As Integer   体重 As Single End Type といった、構造体を作成して、 Dim Profiles(100) As Profile といったように、配列を宣言すると思います。 (注:実際には100の添字は適切な最大値を設定、または、動的配列にする) で、ソートのためにデータ交換する場合は、例えば以下のような感じですかね。 If Profiles(0).体重 < Profiles(1).体重 then   Dim Tmp As Profile   Tmp = Profiles(0)      ※   Profiles(0) = Profiles(1)  ※   Profiles(1) = Tmp      ※ End If (注:実際には0、1等の添字はカウンタ変数等で扱わないと無意味) 上記の※では構造体をデータの集まりとして処理しています。 Profiles(0)={名前="A",身長=Aさんの身長,体重=Aさんの体重} Profiles(1)={名前="B",身長=Bさんの身長,体重=Bさんの体重} (注:上記のようなプログラム記述法はありません。実際のコードとして記述するとエラーになります) 例えば、上のようなデータが入っていた場合、適切に『構造体をデータの集まりとして処理』しているならば、 Profiles(n)={名前="A",身長=別人の身長,体重=別人の体重} のような、ごちゃ混ぜのデータにはなりません。 If Profiles(0).体重 < Profiles(1).体重 then   Dim Tmp As Integer   Tmp = Profiles(0).体重   Profiles(0).体重 = Profiles(1).体重   Profiles(1).体重 = Tmp End If 当然ながら、上記のように『構造体をデータの集まりとして処理』せずに、体重のみをソートするようなプログラムコードを書くことは可能です。 その場合、何のためにわざわざ構造体をつかうのかはともかくとして、動作上の問題はありません。 Profiles(n)={名前="A",身長=Aさんの身長,体重=別人の体重} となるでしょうが。

  • tkrn
  • ベストアンサー率53% (33/62)
回答No.1

> すると体重だけがソートされてしまうのでしょうか? > それとも構造体ごとソートされてくれるのでしょうか? ソートのアルゴリズム次第だと思いますよ。 体重で比較し構造体ごとスワップかければ構造体ごとソートされます。

関連するQ&A