如何在C 中添加键/优先级

How to add a key/ priority to std::priority_queue in c++?

本文关键字:优先级 添加      更新时间:2023-10-16

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

我不明白container_type(vector)

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

我非常感谢任何帮助!

您可以创建一个将超载 ()

过载的类
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);

您将需要一个比较器函数。我认为最好以下面给出的方式实施,而不是为其宣布课程。

auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);