【问题标题】:How to define a custom compare function to sort a matrix according as one dimensional array sort如何定义自定义比较函数以根据一维数组排序对矩阵进行排序
【发布时间】:2016-11-10 12:48:53
【问题描述】:

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

如何定义合适的比较函数?

(或者。我是否必须编写自己的复古风格冒泡排序函数)

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 ?

下面的演示显示了输入的两个数组(之前)以及我希望它们在部分(之后)中排序的内容,因为我对 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

【问题讨论】:

  • 不清楚你将如何对数组进行排序。

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


【解决方案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; }
};

【讨论】:

  • 我在 matlab 中捕获了一个函数,即 sortrows
  • @N.Ramos 我不明白你的意思。
  • 感谢您的回答。我的意思是 MATLAB 中有一个名为“sortrows”的函数。这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多