如何在 C++ 中向 std::priority_queue 添加键/优先级?
How to add a key/ priority to std::priority_queue in c++?
我正在尝试使用 std::priority_queue
实现 Dijkstra 的寻路算法。我的队列是 Node*
类型,我需要它根据存储在 Node
中的 float gScore
从最小 gScore 到最大来确定优先级。我已经阅读了文档,但我仍然不明白这是如何实现的。有什么想法吗?
我不明白 container_type(vector)
的类型是什么意思
std::priority_queue<Node*> queue;
非常感谢任何帮助!
您可以创建一个 class 来重载 ()
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);
您将需要一个比较函数。我认为以下面给出的方式实施会更好,而不是为其声明 class。
auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);
我正在尝试使用 std::priority_queue
实现 Dijkstra 的寻路算法。我的队列是 Node*
类型,我需要它根据存储在 Node
中的 float gScore
从最小 gScore 到最大来确定优先级。我已经阅读了文档,但我仍然不明白这是如何实现的。有什么想法吗?
我不明白 container_type(vector)
的类型是什么意思std::priority_queue<Node*> queue;
非常感谢任何帮助!
您可以创建一个 class 来重载 ()
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);
您将需要一个比较函数。我认为以下面给出的方式实施会更好,而不是为其声明 class。
auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);