Ian*_*Ian 1 c++ sorting priority-queue
我的优先级队列有问题:
std::priority_queue <NodePrio, std::vector<NodePrio>, sortNodesByPrio> PQ;
Run Code Online (Sandbox Code Playgroud)
哪里
struct NodePrio
{
Node *node;
double priority;
NodePrio() : node(NULL), priority(0) {}
NodePrio(Node *node_, double priority_) : node(node_), priority(priority_) {}
};
Run Code Online (Sandbox Code Playgroud)
和
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;
}
Run Code Online (Sandbox Code Playgroud)
经过反复推动新元素
PQ.push(NodePrio(node, distance));
Run Code Online (Sandbox Code Playgroud)
从任何时间点他们都没有排序(见下文)...我试图调试代码,比较器代码已反复执行...
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
Run Code Online (Sandbox Code Playgroud)
根据您显示的"示例结果",您似乎无法理解优先级队列是什么.
优先级队列保证当您从中删除元素(使用top()和pop())时,元素将按优先级顺序删除.元素不按优先级顺序存储,它们存储在堆中.
您可以查阅自己喜欢的算法手册或网站,以获取有关优先级队列如何存储其元素的更多信息.