📅  最后修改于: 2023-12-03 15:37:34.893000             🧑  作者: Mango
在C++中,我们可以使用std::sort()
函数来对2D向量进行排序。这个函数是一个通用的排序算法,可以用于任何类型的容器。
排序2D向量有多种方式。在本篇文章中,我们将讲解如何按列数进行排序。也就是说,我们将根据第k列的值,对2D向量进行排序。
定义一个按列数排序的比较函数
bool compare(const vector<int>& v1, const vector<int>& v2) {
return v1[k] < v2[k];
}
这里定义了一个compare()
函数来比较两个vector<int>
类型的向量v1
和v2
。这个函数中,k
是一个全局变量,代表比较时的列数。
通过函数指针将compare()
函数传递给std::sort()
函数,以实现按列数排序。
sort(v.begin(), v.end(), compare);
这里,v
是一个2D向量,v.begin()
和v.end()
返回了v
的迭代器。通过将compare()
函数指针作为第三个参数传递给std::sort()
函数,我们可以实现按列数排序。
运行并输出排序后的2D向量。
for(auto x: v) {
for(auto y: x) {
cout << y << " ";
}
cout << endl;
}
这里,我们使用了auto
关键字来自动推断变量类型。最后通过两层循环输出排序后的2D向量。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int k = 2; // 全局变量,表示第k列
bool compare(const vector<int>& v1, const vector<int>& v2) {
return v1[k] < v2[k];
}
int main() {
vector<vector<int>> v = {{1, 3, 2},
{20, 5, 10},
{6, 8, 2},
{7, 1, 9}};
sort(v.begin(), v.end(), compare);
for(auto x: v) {
for(auto y: x) {
cout << y << " ";
}
cout << endl;
}
return 0;
}
1 3 2
6 8 2
7 1 9
20 5 10
本篇文章介绍了如何在C++中对2D向量按列数进行排序。通过定义一个比较函数,将函数指针作为参数传递给std::sort()
函数即可实现按列数排序。