优先级队列作为最小堆 c++ 与 python 中的 heapq(如何将 heapq.heappop(openList) 转换为 c++?)
priority queue as min heap c++ vs heapq in python (how to convert heapq.heappop(openList) to c++?)
我有以下 python 代码:
import heapq
heapq.heappush(openList, currentSearchNode)
#NOTE List of nodes that have been checked
closedList = []
while openList:
#NOTE Pop the lowest fscore (to-go + been from or gScore + hScore) and set it as current
currentSearchNode = heapq.heappop(openList)
...
我需要将其转换为 C++14,我试过这个:
#include <functional>
#include <queue>
priority_queue <Node, vector<Node>, greater<Node>> min_heap;
vector<Node> openList, closeList;
Node currentNode = Node(start, euclidean(start, end), 0);
min_heap.emplace(openList, currentNode);
while (!openList.empty()) {
currentNode = min_heap.pop(openList);
...
}
Visual Studio 中唯一以红色弹出的问题是这一行 currentNode = min_heap.pop(openList);
,如您所见,它表示 pop 的参数太多。正确的做法是什么?
像下面这样怎么样;
while (!min_heap.empty()) {
currentNode = min_heap.top(); // sets the top small (since std::greater used)element to currentNode;
/* do something with currentNode */
min_heap.pop(); // pops the element from container
}
我有以下 python 代码:
import heapq
heapq.heappush(openList, currentSearchNode)
#NOTE List of nodes that have been checked
closedList = []
while openList:
#NOTE Pop the lowest fscore (to-go + been from or gScore + hScore) and set it as current
currentSearchNode = heapq.heappop(openList)
...
我需要将其转换为 C++14,我试过这个:
#include <functional>
#include <queue>
priority_queue <Node, vector<Node>, greater<Node>> min_heap;
vector<Node> openList, closeList;
Node currentNode = Node(start, euclidean(start, end), 0);
min_heap.emplace(openList, currentNode);
while (!openList.empty()) {
currentNode = min_heap.pop(openList);
...
}
Visual Studio 中唯一以红色弹出的问题是这一行 currentNode = min_heap.pop(openList);
,如您所见,它表示 pop 的参数太多。正确的做法是什么?
像下面这样怎么样;
while (!min_heap.empty()) {
currentNode = min_heap.top(); // sets the top small (since std::greater used)element to currentNode;
/* do something with currentNode */
min_heap.pop(); // pops the element from container
}