#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <utility>
using namespace std;
#define pb push_back
#define ll long long
int main(void)
{
int n, q, w;
cin>>n;
vector< pair <int,int> > a;
for (int i = 0; i < n; i )
{
cin>>q>>w;
a.push_back( make_pair(q,w) );
}
sort(a.begin(), a.end());
for (int i = 0; i < n; i )
{
cout<<a[i].first<<" "<<a[i].second<<endl;
}
return 0;
}
我需要對向量進行排序,第一個元素增加,如果有多個相同大小的第一個元素,則第二個元素應該減少排序。
這是我嘗試過的一些示例(也是我想要的輸出):
Input: 7
1 1
1 9
1 3
5 4
3 2
8 8
5 1
Program output: 1 1
1 3
1 9
3 2
5 1
5 4
8 8
Output I need: 1 9
1 3
1 1
3 2
5 4
5 1
8 8
uj5u.com熱心網友回復:
std::sort可以傳遞一個比較器以用于比較元素。Usingstd::tie是比較元組的一種便捷方式:
std::sort(a.begin(), a.end(),[](const auto& a,const auto& b){
return std::tie(a.first,b.second) < std::tie(b.first,a.second);
});
請注意如何second交換對的元素以使它們按降序排列。
uj5u.com熱心網友回復:
基本上,您需要自定義函式的比較器sort功能。
這可以使用 lambda 函式來實作。
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
int main() {
int n, q, w;
std::cin >> n;
std::vector<std::pair<int,int>> a;
for (int i = 0; i < n; i ) {
std::cin >> q >> w;
a.push_back ({q, w});
}
auto fsort = [] (const std::pair<int,int>& a, const std::pair<int,int>& b) {
if (a.first != b.first) return a.first < b.first;
return a.second > b.second;
};
std::sort(a.begin(), a.end(), fsort);
for (int i = 0; i < n; i ) {
std::cout << a[i].first << " " << a[i].second << std::endl;
}
return 0;
}
uj5u.com熱心網友回復:
您需要創建一個單獨的函式,在其中比較兩對的第一個元素,如果它們不相等,那么它將回傳哪個更小,否則它將回傳哪個更大。
像這樣:TRY IT ONLINE
#include <iostream>
#include <vector>
#include <algorithm>
bool pair_sorting(const std::pair<int, int>& p1, const std::pair<int, int> &p2)
{
return (p1.first != p2.first) ? p1.first < p2.first : p1.second > p2.second;
}
void sort_pairs(std::vector<std::pair<int, int>> &vec)
{
std::sort(vec.begin(), vec.end(), pair_sorting);
}
int main(void)
{
int n, q, w;
std::cin >> n;
std::vector<std::pair<int, int>> a;
for (std::size_t i = 0; i < n; i )
{
std::cin >> q >> w;
a.push_back(std::make_pair(q, w));
}
sort_pairs(a);
std::cout << "Sorted:\n";
for (std::size_t i = 0; i < a.size(); i )
{
std::cout << a[i].first << " " << a[i].second << "\n";
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/436695.html
上一篇:右值參考轉發
