【发布时间】:2020-08-03 02:56:47
【问题描述】:
我尝试使用 STL 排序和我自己的布尔函数对 vector<pair<int, int>> 进行排序。
#include <bits/stdc++.h>
using namespace std;
bool comp(pair<int, int> u1, pair<int, int> u2){
if(u1.first != u2.first) return u1.first < u2.first;
return u2.second > u2.second;
}
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int univs, day, pay, max_income = 0, spent = 0;
vector<pair<int, int>> day_pay;
cin >> univs;
for(int u = 0; u < univs; u++){
cin >> pay >> day;
day_pay.push_back(make_pair(day, pay));
}
for(int i = 0; i < univs; i++) cout << day_pay[i].first << " " << day_pay[i].second << endl;
cout << endl;
sort(day_pay.begin(), day_pay.end(), comp);
for(int i = 0; i < univs; i++) cout << day_pay[i].first << " " << day_pay[i].second << endl;
for(int u = 0; u < univs; u++){
if(day_pay[u].first <= spent) continue;
max_income += day_pay[u].second;
spent++;
}
cout << max_income;
}
这是测试用例:
4
50 2
10 1
20 2
30 1
我想把这个案例排序为
30 1
10 1
50 2
20 2
我应该怎么做才能解决这个问题?
【问题讨论】:
-
我猜应该是
u1.first > u2.first!! -
为了澄清-您要进行排序,以便首先比较第二个元素并且按顺序较低的数字等于较早,然后如果第二个元素相等,您比较第一个元素并且按顺序较早的数字等于?您能否添加一些共享相同第一个元素的对,并在您的示例中显示您希望它们如何排序?
-
需要有一个 wiki 页面,类似于“为什么竞争性编码网站不利于学习?”
-
@sweenish 也许他们打字太快了,他们看不到自己打错了字。这个错误看起来更像是一个错字,而不是一致努力比较错误的项目。