我正在尝试使用std::priority_queue
实现Dijkstra的寻路算法。我的队列属于Node*
类型,我需要根据float gScore
存储在Node
内的最小gScore到最大值来确定优先级。我已经阅读了文档,但我仍然不明白如何实现这一目标。有什么想法吗?
我不明白container_type(vector)
的类型含义std::priority_queue<Node*> queue;
我非常感谢任何帮助!
答案 0 :(得分:1)
您可以创建一个会超载()
class cmp
{
public:
bool operator()(const Node *a, const Node *b) const
{
return (a->gscore) > (b->gscore);
}
};
然后
std::priority_queue<Node*,std::vector<Node*>,cmp);
答案 1 :(得分:1)
您需要一个比较器功能。我认为最好以下面给出的方式实现,而不是为它声明一个类。
auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);