Priority_queue排序错误,如何解决?

时间:2019-01-17 11:27:39

标签: c++ sorting vector

我有一个向量“ v”和一个类型T的优先级队列“ que”,它由两个值组成:“ 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);
    }
    //...

0 个答案:

没有答案
相关问题