Priority_queue неправильно сортирует, как это исправить? - PullRequest
0 голосов
/ 17 января 2019

У меня есть вектор "v" и очередь с приоритетами "que" типа T, которые состоят из двух значений: "ai" - число и "ind" - индекс числа в векторе. Мне нужно отсортировать очередь по AIS. Я написал свой компаратор для этого. Проблема в том, что когда я помещаю новую пару чисел в очередь, она не сортируется правильно. Например, у меня есть такие числа: 3, 5, 12, 1. Когда я нажимаю последний номер 1, он сравнивается с 5 и меняет его место вместе с ним, затем меняет местами на 3. В итоге очередь выглядит так: 1, 3 , 12, 5. Почему так происходит, что не так?

Вот кусок кода:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct T {
    long long ai;
    long long ind;
};
int main() {
    long long n, m, ai;
    cin >> n >> m;
    vector<long long> v;
    T st;
    auto cmp = [](const T const left,const T const right) {
        return left.ai > right.ai;
    };
    priority_queue<T, vector<T>, decltype(cmp)> que(cmp);
    for (int i = 0; i < n; i++) {
        cin >> ai;
        st.ai = ai;
        st.ind = i;
        v.push_back(ai);
        que.push(st);
    }
    //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...