[英]C++, priority queue, items are not sorted
我對優先級隊列有疑問:
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
根據顯示的“樣本結果”,您似乎不了解什么是優先級隊列。
優先級隊列保證當您從中刪除元素時(使用top()
和pop()
),這些元素將按優先級順序被刪除。 元素未按優先級順序存儲,而是存儲在堆中。
您可以查閱自己喜歡的算法書籍或網站,以獲取有關優先級隊列如何存儲其元素的更多信息。
嘗試改變
return n1.priority() < n2.priority();
至
return n1.priority < n2.priority;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.