2016-11-10 73 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”的函数。这正是我想要的。 –

相关问题