📅  最后修改于: 2023-12-03 15:10:10.186000             🧑  作者: Mango
排序2D向量是在C++编程中的一个常见问题,许多程序员通常会遇到这个问题。在这篇文章中,我们将向您介绍如何使用STL库的sort函数对2D向量进行排序。该函数可用于按列或行进行排序,并支持升序或降序排序。这篇文章包括以下主题:
2D向量是表示二维矩阵的数据类型,由行和列中的值组成。例如,以下是一个3x3的矩阵:
1 2 3
4 5 6
7 8 9
在C++编程中,2D向量通常使用STL库的vector容器实现。可以使用vector<vector
vector<vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
STL库的sort函数可用于对2D向量进行排序。STL库提供了有用的排序函数,它们可以根据需要轻松地排序2D向量。sort函数需要三个参数:
比较函数是一个接受两个参数并返回一个bool值的函数。它将其传递的两个元素相互比较,如果第一个元素小于第二个元素,则返回true。
以下是一个比较函数模板:
bool compare(const vector<int>& a, const vector<int>& b) {
//比较a和b
return true/false; //如果a小于b,则返回true
}
以下是一个演示如何对2D向量按行升序排序的例子:
#include <iostream>
#include <vector>
#include <algorithm> //sort函数所在的头文件
using namespace std;
vector<vector<int>> matrix = {{3, 2, 1}, {6, 5, 4}, {9, 8, 7}};
bool compare(const vector<int>& a, const vector<int>& b) {
return a[0] < b[0];
}
int main() {
cout << "Before sorting:\n";
for(auto row: matrix) {
for(auto cell: row) {
cout << cell << " ";
}
cout << "\n";
}
sort(matrix.begin(), matrix.end(), compare);
cout << "After sorting:\n";
for(auto row: matrix) {
for(auto cell: row) {
cout << cell << " ";
}
cout << "\n";
}
return 0;
}
上面的程序将按行和升序对2D向量进行排序。
输出结果:
Before sorting:
3 2 1
6 5 4
9 8 7
After sorting:
1 2 3
4 5 6
7 8 9
STL库的sort函数具有许多选项,可以用于自定义排序。首先,STL库中的sort函数默认按升序排序。要按降序排序,请可以在比较函数中使用大于号(>)替代小于号(<)。
例如,以下比较函数将以降序方式对2D向量进行排序。
bool compare(const vector<int>& a, const vector<int>& b) {
return a[0] > b[0]; //降序排序
}
其次,可以使用STL库中的sort函数按列而不是行排序。要按列排序,请在比较函数中比较每个行向量的特定列。例如,以下是按第二列升序排序的比较函数:
bool compare(const vector<int>& a, const vector<int>& b) {
return a[1] < b[1];
}
最后,排序2D向量时,可以使用STL库中的sort函数对两个元素以外的更多属性进行比较。例如,以下比较函数将首先按第一列排序,其次按第二列排序:
bool compare(const vector<int>& a, const vector<int>& b) {
if(a[0] != b[0]) {
return a[0] < b[0];
}
return a[1] < b[1];
}
排序2D向量是在C++编程中一个常见的问题。在本篇文章中,我们向您展示了如何使用STL库中的sort函数对2D向量进行排序。我们讨论了如何根据需要设置排序方法,包括按行或列排序以及升序或降序排列。通过选择适当的参数和比较函数,可以轻松地排序2D向量以满足特定的需求。