2017-03-05 53 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能夠做些什麼。

相關問題