我想知道如何在 C 中對 2D 向量進行排序,以便按兩個元素進行排序。它將按第一個元素升序排序,如果有多個第一個元素,它們將按第二個元素的升序排序。這是我的意思的一個例子:
vector<vector<int>> vec = {{10, 23}, {10, 22}, {1, 100}, {13, 12}};
這將被分類為:
{{1, 100}, {10, 22}, {10, 23}, {13, 12}}
uj5u.com熱心網友回復:
如果您使用 C 20std::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
uj5u.com熱心網友回復:
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;
});
uj5u.com熱心網友回復:
像這樣 :
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;
}
uj5u.com熱心網友回復:
當我看到它時,我認為這很酷。使用 std::sort 的比較函式,您可以撰寫如下所示的內容。這很好地擴展并且在嵌套排序上非常靈活!
bool comp(vector<int> v1, vector<int> v2)
{
if(v1[0]<v2[0])
return true;
else if(v1[0]==v2[0])
return v1[1]<v2[1];
else
return false;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466408.html
