2016-11-10 119 views
0

我試圖排序二維數組(矩陣),而一維數組作爲排序相關的行順序。如何定義一個自定義的比較函數按照一維數組排序一個矩陣排序

如何定義合適的比較函數?

(或者,我應該有代碼我自己的復古風格冒泡排序功能)

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 ? 

以下演示顯示輸入兩個陣列(前)和我想將它們分類像部分內容(AFTER ),因爲我排序id數組值,矩陣的相關行應該相同重新排序。

(在此先感謝任何反應和想法)

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; 
}; 

它包含您的id和數組中的原始索引。一旦您對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」的函數。這正是我想要的。 –

相關問題