我有一个向量“ 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);
}
//...