我想知道如何在C++中对2D向量进行排序,以便按这两个元素进行排序。它将按第一个元素的升序排序,如果存在第一个元素的多个元素,它们将按照第二个元素的升序排序。这里是我的意思的一个例子:
vector<vector<int>> vec = {{10, 23}, {10, 22}, {1, 100}, {13, 12}};这将被分类为:
{{1, 100}, {10, 22}, {10, 23}, {13, 12}}发布于 2022-04-27 15:27:05
如果您正在使用C++20,std::ranges::sort将是一个很好的选择:
#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
int main() {
std::vector<std::vector<int>> vec = {{10, 25}, {10, 23}, {10, 22},
{10, 24}, {1, 100}, {13, 12}};
std::ranges::sort(vec);
for (const auto& row : vec)
for (const auto& col : row)
std::cout << col << " ";
}输出:
1 100 10 22 10 23 10 24 10 25 13 12 如果不是,std::sort也同样有效:
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> vec = {{10, 25}, {10, 22}, {10, 26},
{10, 24}, {1, 100}, {13, 12}};
std::sort(vec.begin(), vec.end());
for (const auto& row : vec)
for (const auto& col : row)
std::cout << col << " ";
}输出:
1 100 10 22 10 24 10 25 10 26 13 12发布于 2022-04-27 15:20:56
sort(vec.begin(), vec.end(), [&](vector<int> &a, vector<int> &b){
return a[0] < b[0]? true : (a[0] == b[0]) ? a[1] < b[1] : false;
});发布于 2022-04-27 15:10:54
就像这样:
int m = vec.size();
int n = vec[0].size();
sort(vec[0].begin(), vec[0].end());
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
cout << vec[i][j] << " ";
cout << endl;
}https://stackoverflow.com/questions/72031008
复制相似问题