2016-11-10 3 views
0

2次元配列(行列)をソートしようとしていますが、1次元配列は行順に関連してソートされています。1次元配列ソートとして行列をソートするカスタム比較関数を定義する方法

どのように適切な比較関数を定義できますか?

(または。私は自分のレトロなスタイルバブルソート機能をコーディングする必要があります)

double matrix[4][3]; 
double id[4]; 
fillAllArrays();//declared somewhere 
std::sort(std::begin(matrix),std::end(matrix),compare); 
//how can I define compare function ? 

次のデモは、入力された2つのアレイ(前)と私は彼らにしたい(AFTER節のようにソートを表示)私はid配列の値を並べ替えるので、行列の関連する行は同じ順序でなければなりません。

(任意の応答を事前に感謝やアイデア)

、BEFORE

double matrix[4][3] 
0.45 0.67 0.41 
0.94 0.34 0.34 
0.12 0.50 0.42 
0.34 0.52 0.74 

double id[4] 
35 
67 
12 
47 


double matrix[4][3] 
0.12 0.50 0.42 
0.45 0.67 0.41 
0.34 0.52 0.74 
0.94 0.34 0.34 

double id[4] 
12 
35 
47 
67 
+0

のベクトルを並べ替えることができ(多分それは小さい)直接行列をソートしたいです。 –

答えて

1

が周りのソート時に行列の行を移動した後は、あなたが避けるべきものです。代わりに、

struct IdAndIndex{ 
    double id; 
    int index; 
}; 

と配列の元のインデックスが含まれているベクトルを並べ替えます。一度それをソートしたら、std::vector<IdAndIndex>に応じて行列の行を並べ替えることができます。

た場合、またはあなたが本当にあなたの代わりにそれを使用すると、配列のソートしようとしているかは明らかではない

struct IdAndRow { 
    double id; 
    double[3] row; 
    bool operator<(const IdAndRow& other) { return id < other.id; } 
}; 
+0

私はmatlabの関数、すなわちsortrowsをキャッチ –

+0

@ N.Ramos私はあなたが意味することを理解していません。回答のために – user463035818

+0

ありがとうございます。つまり、MATLABには "sortrows"という関数があります。それは私が欲しいものです。 –

関連する問題