sort二维数组C++
时间: 2025-02-01 07:13:01 浏览: 37
### 如何在C++中对二维数组进行排序
对于多维数组,在C++中的处理方式可以基于将其视为一维结构来简化操作,特别是当涉及到排序这样的操作时。然而,针对具体的二维数组(矩阵),通常有两种主要方法来进行排序:
#### 方法一:转换为一维向量再排序
一种常见的做法是先将二维数组的数据复制到一个临时的一维`std::vector`中,完成排序后再重新填充回原始的二维数组。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
void sortMatrix(std::vector<std::vector<int>>& matrix) {
std::vector<int> temp;
// 将所有元素加入temp vector
for (auto& row : matrix) {
for (int elem : row) {
temp.push_back(elem);
}
}
// 对temp执行标准升序排序
std::sort(temp.begin(), temp.end());
// 把已排序的结果放回到matrix里
size_t index = 0;
for (auto& row : matrix) {
for (size_t i = 0; i < row.size(); ++i) {
row[i] = temp[index++];
}
}
}
```
这种方法简单直观,但是它会消耗额外的空间用于存储中间状态的一维数组[^1]。
#### 方法二:自定义比较器并直接排序每一行
另一种更高效的方式是在不改变原有数据布局的情况下直接对其进行排序。这可以通过提供给定维度上的特定顺序规则来自定义比较函数实现。下面的例子展示了按照行优先级逐行排序整个矩阵的情况。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
bool compareRows(const std::vector<int>& lhs, const std::vector<int>& rhs){
return lhs < rhs; // 使用默认小于运算符比较两个整数型向量
}
void sortMatrixByRow(std::vector<std::vector<int>>& matrix) {
std::stable_sort(matrix.begin(), matrix.end(), compareRows);
}
// 测试代码片段
int main(){
std::vector<std::vector<int>> mat = {{9,8},{7,6},{5,4}};
sortMatrixByRow(mat);
for(auto& r : mat){
for(int c:r){
std::cout << c << ' ';
}
std::cout << '\n';
}
return 0;
}
```
此段代码实现了按照每行的第一个元素从小到大排列各行的效果,并保持相同首元素情况下原有的相对位置不变(通过使用 `std::stable_sort()` 函数)。如果希望依据其他条件或列进行排序,则需相应调整比较逻辑[^2]。
阅读全文
相关推荐

















