Невозможно отсортировать вектор > - PullRequest
0 голосов
/ 20 апреля 2020

Я попытался отсортировать vector<pair<int, int>>, используя сортировку STL с моей собственной логической функцией.

#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

Что я должен сделать для решения этой проблемы?

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

Строка

return u2.second > u2.second;

является подозрительной. Вы, скорее всего, имеете в виду

return u1.second > u2.second;
0 голосов
/ 20 апреля 2020

Я думаю, что это очень хорошо работает для сортировки, измените его в соответствии с вашим вопросом. (PS: это C ++ 14, не будет работать с C ++ 11.)

#include <iostream>
#include <vector>
#include <utility>
int32_t main() {
    int t;
    std::cin >> t;
    std::vector<std::pair<int, int>> v(t);
    for(auto &i : v)
        std::cin >> i.first >> i.second;
    std::sort(v.begin(), v.end(), [](const auto &a, const auto &b) {
       return (a.second != b.second) ? (a.second < b.second) : (a.first > b.first); 
    });
    for(auto &i : v)
        std::cout << i.first << " " << i.second << std::endl;
    return 0;
}
0 голосов
/ 20 апреля 2020

Посмотрите на вашу функцию comp. Строка после if:

return u2.second > u2.second;

не должна быть:

return u1.second > u2.second
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...