如何定义自定义比较函数以根据一维数组排序矩阵

时间:2016-11-10 12:48:54

标签: c++ arrays sorting matrix cross-platform

我试图对二维数组(矩阵)进行排序,而一维数组的排序与行顺序相关。

如何定义合适的比较功能?

(或。我应该编写自己的复古风格气泡排序功能)

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 ?

以下演示显示了输入的两个数组(BEFORE)以及我想要的内容,就像在节(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

<小时/>       AFTER

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

1 个答案:

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