如何更新std :: priority_queue中的元素?

时间:2017-03-05 10:11:26

标签: c++ priority-queue

#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),然后我更改了队列中存在的中间元素的值,但是在更新元素后无法弄清楚如何更新优先级队列?

1 个答案:

答案 0 :(得分:0)

优先级队列旨在使用固定优先级,即元素优先级应在插入时知道,然后保持不变。这就是为什么在将元素推入队列时完成所有比较的原因。

如果您想要一个可以让您更改密钥的已排序容器,请尝试std::multimap。它将允许您删除任何元素,并将自己重新平衡。从begin()end()遍历它将按所需顺序访问您的node

不幸的是,您仍然需要删除并插入元素才能更改密钥,希望C ++ 17能够对此做些什么。