>,c++,sorting,stl"/>

首页 > 解决方案 > 无法对向量进行排序>

问题描述

我尝试vector<pair<int, int>>使用带有我自己的布尔函数的 STL 排序来对 a 进行排序。

#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

我应该怎么做才能解决这个问题?

标签: c++sortingstl

解决方案


看看你的comp函数。if 后面的行:

return u2.second > u2.second;

不应该是:

return u1.second > u2.second

推荐阅读