2010-11-26 35 views
1

我有優先級隊列的問題:C++,優先級隊列,項目不排序

std::priority_queue <NodePrio, std::vector<NodePrio>, sortNodesByPrio> PQ; 

其中

struct NodePrio 
{ 
Node *node; 
double priority; 

NodePrio() : node(NULL), priority(0) {} 
NodePrio(Node *node_, double priority_) : node(node_), priority(priority_) {} 
}; 

class sortNodesByPrio 
{ 
public: 
    bool operator() (const NodePrio &n1, const NodePrio &n2) const; 
} 


bool sortNodesByPrio::operator() (const NodePrio &n1, const NodePrio &n2) const 
{ 
return n1.priority < n2.priority; 
} 

經過反覆推新元素

PQ.push(NodePrio(node, distance)); 

,並從它們沒有排序(參見下文)在任何時間點......我試着調試代碼,比較代碼已經被重複執行...

Step1: 
push (node, 55.33); 

PQ: 
[0] 55.33 

Step2: 
push (node, 105.91); 

PQ: 
[0] 105.91 
[1] 55.33 

Step 3: 
push (node, 45.18); 

PQ: 
[0] 105.91 
[1] 55.33 
[2] 45.18 

Step 4: 
push (node, 70.44); 

PQ: 
[0] 105.91 
[1] 70.44 
[2] 45.18 
[3] 55.33 //Bad sort 
+0

你是什麼意思「他們沒有排序?」您可以發佈一些您輸入的樣本數據,以及將所有數據彈出優先隊列時的結果嗎? – 2010-11-26 18:30:33

+0

您可以舉出一個或兩個您的輸入以及隊列的結果內容是什麼?另外,你到目前爲止的調試方式是什麼? – suszterpatt 2010-11-26 18:32:12

回答

0

嘗試改變

return n1.priority() < n2.priority(); 

return n1.priority < n2.priority; 
+1

愚蠢的問題:添加()到變量是做什麼的? – 2010-11-26 18:39:31

7

基於「樣本結果」你看,它看起來像你不明白一個優先級隊列是什麼。

優先級隊列保證當您從中刪除元素時(使用top()pop()),元素將按優先級順序刪除。元素不按優先級順序存儲,它們存儲在堆中。

有關優先級隊列如何存儲其元素的更多信息,請參閱您最喜愛的算法書籍或網站。