У меня есть вектор "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);
}
//...