【问题标题】:c++ sort() function is not sorting my vectorc++ sort() 函数没有对我的向量进行排序
【发布时间】:2022-01-01 15:41:06
【问题描述】:

这是我的代码 -

问题:我编写的排序比较器函数没有做任何事情。代码被执行,比较器函数也运行,但它不会修改我的向量。我不明白为什么。

逻辑(我已经写过):

  1. 我使用区域索引作为我的向量的索引。对于每个区域,我都维护了一个 (points, surname) 的向量。

  2. 然后,对于每个区域,我根据它们的点对我的向量进行了排序。

  3. 然后,我检查了第一名和第二名的积分是否没有声誉,相对于第二名和第三名,这意味着我们有明确的赢家,记录他们。

  4. 打印记录的获胜者。

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
    int participants, regions;
    cin >> participants >> regions;
    vector<vector<pair<int, string>>> cands(regions);
    string surname;
    int region, points;
    for (int i{0}; i<participants; i++) {
        cin >> surname >> region >> points;
        cands[region-1].push_back({points, surname});
    }
    for (auto vec : cands) {
        sort(vec.rbegin(), vec.rend(), [](pair<int, string>& x, pair<int, string>& y) {
            return x.first > y.first;
        });
    }
    // for (auto vec : cands) {
    //     for (auto ele : vec) cout << ele.first << " " << ele.second << endl;
    //     cout << endl;
    // }
    vector<pair<string, string>> teams;
    for (auto vec : cands) {
        if (vec[0].first == vec[1].first) teams.push_back({"?", ""});
        else {
            if (vec.size() > 2) {
                if (vec[1].first == vec[2].first) teams.push_back({"?", ""});
                else teams.push_back({vec[0].second, vec[1].second});
            } else teams.push_back({vec[0].second, vec[1].second});
        }
    }
    for (auto ele : teams) cout << ele.first << " " << ele.second << endl;
    return 0;
}

【问题讨论】:

    标签: c++ sorting


    【解决方案1】:
    for (auto vec : cands) {
    

    这会创建cands 中元素的副本,而不是cands 本身的实际元素。

    将您的代码更改为:

    for (auto &vec : cands) {
    

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多