📅  最后修改于: 2023-12-03 14:51:15.199000             🧑  作者: Mango
在C++中对2D向量进行排序的应用非常广泛,排序的方式也有很多种。本篇文章将介绍如何在C++中对二维向量进行按行和列的降序排列。
我们有一个二维向量,其中每一行代表一个人,一列代表一个属性。我们需要按照每行和每列的降序排列,以便我们可以快速地找到最佳人选。
我们可以通过使用C++中的sort()函数,以及自定义比较函数来实现对二维向量的排序。
在C++中,sort()函数的语法如下:
sort(startaddress, endaddress, comparator)
现在,我们需要根据每行和每列的值来比较二维向量中的数据,并确定排序的规则。
作为一个例子,我们可以先按照每行的值进行排序。为此,我们需要编写一个表示行的比较函数,如下所示:
bool rowComparator(vector<int>& row1, vector<int>& row2) {
return row1[0] > row2[0];
}
在这个函数中,我们首先比较第一个元素(第一列),并返回两个行的比较结果。如果第一列相等,则继续比较第二列,以此类推。
接下来,我们可以使用这个函数来对二维向量按行进行排序,如下所示:
sort(myVector.begin(), myVector.end(), rowComparator);
这将对myVector中的每一行进行排序。如果您想要按列进行排序,则可以编写一个类似的比较函数,如下所示:
bool columnComparator(vector<int>& row1, vector<int>& row2, int column) {
return row1[column] > row2[column];
}
该函数同样需要两个行作为输入,还需要一个表示要比较的列的整数参数。它将按照指定的列进行比较,返回比较结果。
您可以使用此函数来对二维向量中的每列进行排序,如下所示:
for (int i = 0; i < myVector[0].size(); i++) {
sort(myVector.begin(), myVector.end(), [&](vector<int>& row1, vector<int>& row2) {
return columnComparator(row1, row2, i);
});
}
这将循环对myVector中的每一列进行排序。其中,'&'表示按引用传递的操作符,使得我们可以在lamda表达式内部访问i变量。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool rowComparator(vector<int>& row1, vector<int>& row2) {
return row1[0] > row2[0];
}
bool columnComparator(vector<int>& row1, vector<int>& row2, int column) {
return row1[column] > row2[column];
}
int main() {
vector<vector<int>> myVector {
{5, 4, 3},
{1, 2, 3},
{8, 7, 6}
};
cout << "Original Vector: " << endl;
for (auto row : myVector) {
for (auto elem : row) {
cout << elem << " ";
}
cout << endl;
}
sort(myVector.begin(), myVector.end(), rowComparator);
cout << "Sorted by Row: " << endl;
for (auto row : myVector) {
for (auto elem : row) {
cout << elem << " ";
}
cout << endl;
}
for (int i = 0; i < myVector[0].size(); i++) {
sort(myVector.begin(), myVector.end(), [&](vector<int>& row1, vector<int>& row2) {
return columnComparator(row1, row2, i);
});
}
cout << "Sorted by Column: " << endl;
for (auto row : myVector) {
for (auto elem : row) {
cout << elem << " ";
}
cout << endl;
}
return 0;
}
现在,我们已经学会了如何在C++中对二维向量进行按行和列的降序排列。我们使用了sort()函数和自定义比较函数,让排序变得十分简单和灵活。您可以按照这个例子,自己编写更加复杂或有趣的排序算法。