17

C++ ソート配列クラス

以下を記録する配列オブジェクトがあります。

これはclassone.hにあります

ClassOne
{
string name;
int data;
float valueData;
}

コンストラクターはclassone.cppで作成されます

main.cpp で、サイズ 10 の ClassOne 配列を作成しました

#include "classone.h"

ClassOne cone[10];

次に、オブジェクトにいくつかの値を記録しました

ClassOne は 3 つのオブジェクトを取得しました

cone[0]
name = "hello"
data = 1
valueData = 20

cone[1]
name = "panda"
data = 2
valueData = 15

cone[2]
name = "joe"
data = 3
valueData = 25

私が達成したいのは、この配列をvalueDataの最も高い昇順形式で再配置できる並べ替えを行うことです..それは

cone[2]それcone[0]からcone[1]..

しかし、バブルソートを使用する場合の問題、私はグーグルを試していくつか見つけました、それらは例えばソートされています int a[]={9,6,5,23,2,6,2,7,1,8};

しかし、クラス配列オブジェクトで並べ替えたいです。値を一緒に再配置します。どうすればこれを達成できますか。

だから私が計算するとき、それは

-- Highest to lowest --
1) Name: Joe , Data = 3, Value =25
2) Name: Hello , Data =1 , Value = 20
3) Name: Panda, Data = 2, Value = 15

すべてのヘルプとガイドに感謝します!!

4

6 に答える 6

8

反復された項目をソートするためにヘッダーで使用するoperator <メソッドを実装する構造体を作成できます。std::sort<algorithm>

struct One {
string name;
int data;
float valueData;

bool operator < (const one &a) const{
return valueData <a.valueData;
}

};

次に、この構造体の配列を作成し、sort 関数を使用して並べ替えるだけです。

于 2015-06-05T18:22:10.633 に答える
3

バブルソートのソースを見てください。ある時点でint、おそらくより小さい演算子(<)またはより大きい演算子(>)のいずれかを使用して、相互に比較します。ここで、並べ替え関数がこれら2つのアイテムの相対的な順序を決定します。その比較を何度も繰り返すことにより、ソート関数はコレクションの全順序を判別できます。

その操作を独自の比較関数に置き換える必要があります。クラスの2つのオブジェクトを受け取り、最初のオブジェクトが2番目のオブジェクトよりも小さいと見なされる場合はtrueを返し、2番目のオブジェクトが最初のオブジェクトよりも小さいと見なされる場合はfalseを返し、同等と見なされる場合はfalseを返す関数。

于 2012-10-10T16:03:16.273 に答える