如何更新std :: Priority_queue中的元素

How to update elements inside an std::priority_queue?

本文关键字:Priority queue 元素 std 何更新 更新      更新时间:2023-10-16
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <stack>
#include <stdio.h>
#include <list>
#include <string.h>
#include <queue>
#include <algorithm>
#define pb push_back
using namespace std;
typedef pair<int,int> ii;

struct node{
    int digit;
};

class Compare{
public:
    bool operator()(node* a,node* b){
        return (a->digit)>(b->digit);
    }
};

int main()
{
priority_queue<node*,vector<node*>,Compare> pq;
vector<node*> vec;
node* p = new node();
node* q = new node();
node* r = new node();
p->digit=100;
q->digit=200;
r->digit=300;
pq.push(p);
pq.push(q);
pq.push(r);
q->digit=50;
pq.push(nod);
while(!pq.empty()){
    cout<<(pq.top())->digit<<endl;
    pq.pop();
}
return 0;
}

我在优先级队列中创建了一个优先级队列,并插入了3个节点(struct),然后我更改了队列中存在的中间元素的值,但无法弄清楚如何更新元素后更新优先级队列?

优先级队列旨在与固定优先级一起工作,即在插入时应知道元素优先级,然后保持相同。这就是为什么将元素推入队列时进行的所有比较。

如果您想要一个可以更改键的排序容器,请尝试std::multimap。它将使您可以删除任何元素并将重新平衡。将其从begin()end()将其访问您的node s。

不幸的是,您仍然必须删除并插入元素以更改密钥,希望C 17会对它做些事情。