c++二维数组自定义sort
时间: 2023-09-16 16:06:29 浏览: 96
可以使用STL中的sort函数来对二维数组进行排序,需要自定义比较函数。
假设有一个二维数组arr,其中每个元素都是一个长度为2的数组,可以先定义一个比较函数cmp:
```c++
bool cmp(int a[], int b[]) {
return a[0] < b[0]; // 按照第一列升序排序
}
```
然后可以使用sort函数进行排序:
```c++
sort(arr, arr + n, cmp); // n为数组长度
```
完整示例:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a[], int b[]) {
return a[0] < b[0]; // 按照第一列升序排序
}
int main() {
int arr[3][2] = {{3, 1}, {1, 2}, {2, 3}};
sort(arr, arr + 3, cmp);
for (int i = 0; i < 3; i++) {
cout << arr[i][0] << " " << arr[i][1] << endl;
}
return 0;
}
```
输出结果:
```
1 2
2 3
3 1
```
相关问题
C++vector二维数组使用sort排序,怎么理解
在C++中,`std::vector`是一个动态数组容器,它可以存储任意类型的元素。如果你想要对二维`vector`(实际上是一维`vector`,因为每个元素又是一个`vector`)进行排序,通常你会先将其视为一维数据结构,然后按照需要的排序方式进行操作。
例如,如果你想按列进行排序,即每一行的数据都被看作是一个独立的一维向量,你可以对每一列的向量应用`sort`函数,然后再对整个二维向量的行进行排序。如果想整体排序,可以将所有元素放入一个大`vector`或者自定义的结构体中,通过指针遍历并传递给`sort`,指定比较规则。
```cpp
// 假设有一个二维vector
std::vector<std::vector<int>> matrix;
// 首先假设我们有两列数据
for (auto &row : matrix) {
std::sort(row.begin(), row.end()); // 按照当前列进行排序
}
// 如果你想按行排序整个矩阵,可以这样做:
std::vector<int> flattened; // 或者创建一个新的vector来存放扁平化的数据
flattened.reserve(matrix.size() * matrix.size());
for (const auto &row : matrix) {
flattened.insert(flattened.end(), row.begin(), row.end());
}
std::sort(flattened.begin(), flattened.end()); // 对所有元素排序
// 然后再还原到二维矩阵中,如果需要
matrix.clear();
for (size_t i = 0; i < flattened.size(); i += matrix.size()) {
std::vector<int> sortedRow(flattened.begin() + i, flattened.begin() + i + matrix.size());
matrix.push_back(sortedRow);
}
```
c++二维数组按大小排序
可以使用STL中的sort函数,结合自定义的比较函数,来对二维数组进行排序。以下是一个示例代码:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int *a, int *b) {
return a[0] < b[0];
}
int main() {
int arr[5][2] = {{3, 5}, {1, 2}, {6, 4}, {2, 4}, {5, 1}};
sort(arr, arr+5, cmp);
for(int i=0; i<5; i++) {
cout << arr[i][0] << " " << arr[i][1] << endl;
}
return 0;
}
```
上述代码中,cmp函数用于比较二维数组的第一列元素的大小,sort函数默认按照小于号(<)进行排序,因此可以直接传入该自定义比较函数。最后输出排好序的二维数组即可。
阅读全文