如何在c ++中为std :: priority_queue添加键/优先级?

时间:2016-06-22 04:28:37

标签: c++ data-structures priority-queue dijkstra

我正在尝试使用std::priority_queue实现Dijkstra的寻路算法。我的队列属于Node*类型,我需要根据float gScore存储在Node内的最小gScore到最大值来确定优先级。我已经阅读了文档,但我仍然不明白如何实现这一目标。有什么想法吗?

我不明白container_type(vector)

的类型含义
std::priority_queue<Node*> queue;

我非常感谢任何帮助!

2 个答案:

答案 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);