2017-03-05 45 views
0
#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个节点(结构),然后我改变存在于队列中的中间元素的值,但不能弄清楚如何更新元件之后更新优先级队列?如何更新std :: priority_queue内的元素?

回答

0

优先队列旨在以固定的优先级工作,即元素优先级应该在插入时知道,然后保持不变。这就是为什么当元素被推入队列时所有的比较都完成了。

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

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

相关问题