c++ - 如何定义自定义比较函数以根据一维数组排序对矩阵进行排序

标签 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 ?

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

最佳答案

在排序过程中移动矩阵的行是你应该避免的事情。相反,我会对

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

关于c++ - 如何定义自定义比较函数以根据一维数组排序对矩阵进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528046/

相关文章:

c++ - 在 Qt5 中从 C++ 操作 QML Canvas

javascript - 如何将对象映射中的数组映射到另一个数组

java - 从左下角填充 gridview

php - 是否可以使快速排序函数对数组进行降序排序?

javascript - 使用保存键按属性值对 Javascript 对象数组进行排序

java - Ignite C++ 客户端用于 cassandra 集成

c++ - 使用容器将单个值解析为 ast 节点

c++ - 使用 gperftools/Heaptrack 无需安装

python - 按特定字段对文件进行排序

javascript - 如何过滤和计算 JavaScript 数组中的对象?