c++ - 根据c ++中的特定行对矩阵的列进行排序
问题描述
有没有一种简单的方法可以根据例如在 c++ 中对矩阵进行排序。第一行,以便所有元素相应地重新排列?
例子:
int matrix[3][3] = { {5,2,4},
{1,7,8},
{9,2,6} };
按第一行排序后,它看起来像这样:
{2,4,5},
{7,8,1},
{2,6,9}
最好,我想使用 sort() 函数,如果它会使任务更容易,我不介意使用向量。
解决方案
正如评论所说,按列对矩阵进行排序比按行排序更容易,因为std::sort
使用 lambda 函数将为前者完成工作。
我的建议是按行对列索引进行排序,然后使用排序后的索引来重建矩阵:
#include <algorithm>
using namespace std;
const int n = 3; // size of matrix
int sort_by_row = 0; // row to sort by
int original[n][n] = { {5,2,4},
{1,7,8},
{9,2,6} };
int main() {
int col_indices[n];
for (int i = 0; i < n; i++) col_indices[i] = i; // create column indices 0...n-1
sort(col_indices, col_indices + n, [] (const int &a, const int &b) { // sort indices by row
return original[sort_by_row][a] < original[sort_by_row][b];
});
int sorted[n][n]; // rebuild matrix
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sorted[i][j] = original[i][col_indices[j]];
}
}
}
在这种方法中,您只对矩阵进行一次迭代,而如果您对矩阵进行转置、排序,然后将其转回,则对矩阵进行两次迭代(在转置期间)。
推荐阅读
- c# - 无法使用表达式树调用 JsonConvert.Deserialize 对象
- python - jinja 中的命名空间变量和循环
- python - 如何将列表中的数字与列表中下一个数字的因子之和进行比较?
- python - 使用 Python 正则表达式的非捕获组中的多个捕获组
- python - 调用另一个类的问题
- c++ - 使用 OpenMP 的高效并行集合
- java - 字符串元素情况下 HashMap/HashTable 的时间复杂度
- python - 为什么我会收到此错误“ImportError: dlopen(...): Symbol not found”?当我在 python 上导入我的库时
- kubernetes - MountPath 未列出文件
- c++ - 在嵌入式 v8 上具有顶级等待的 ES6 模块