C++ 如何在c+中向std::priority_队列添加密钥/优先级+;?

C++ 如何在c+中向std::priority_队列添加密钥/优先级+;?,c++,data-structures,priority-queue,dijkstra,C++,Data Structures,Priority Queue,Dijkstra,我正在尝试使用std::priority\u队列实现Dijkstra的寻路算法。我的队列属于Node*类型,我需要它根据float-gScore存储在Node中的从最小的gScore到最大的gScore来进行优先级排序。我已经阅读了文档,但我仍然不明白如何实现这一点。有什么想法吗 我不明白container_type(vector)表示的类型是什么意思 std::优先级队列; 我非常感谢任何帮助 您可以创建一个重载() 然后 std::priority\u queue您可以创建一个将重载()

我正在尝试使用
std::priority\u队列
实现Dijkstra的寻路算法。我的队列属于
Node*
类型,我需要它根据
float-gScore
存储在
Node
中的
从最小的gScore到最大的gScore来进行优先级排序。我已经阅读了文档,但我仍然不明白如何实现这一点。有什么想法吗

我不明白container_type(vector)表示的类型是什么意思

std::优先级队列;

我非常感谢任何帮助

您可以创建一个重载
()

然后


std::priority\u queue您可以创建一个将重载
()

然后


std::priority\u queue您将需要一个比较器函数。我认为最好以下面给出的方式实现,而不是为它声明一个类

auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);
autocomp=[](节点*a,节点*b)->bool{returna->gscoregscore;};
优先级队列foo(comp);

您需要一个比较器函数。我认为最好以下面给出的方式实现,而不是为它声明一个类

auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; };
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp);
autocomp=[](节点*a,节点*b)->bool{returna->gscoregscore;};
优先级队列foo(comp);

简洁明了的解释。多谢各位@Bojangles很高兴我能帮上忙。如果这有帮助,你可以接受这个答案。应该是:
bool operator()(const Node*a,const Node*b)const
@Ajay你能指出原因吗。这只是一个好的实践还是其他什么。好的实践:是的。您阐明了操作员不打算更改内容的意图。原因:如果
const Node*
优先级队列
的类型,该怎么办?非常量比较运算符根本无法编译。很好的简单解释。多谢各位@Bojangles很高兴我能帮上忙。如果这有帮助,你可以接受这个答案。应该是:
bool operator()(const Node*a,const Node*b)const
@Ajay你能指出原因吗。这只是一个好的实践还是其他什么。好的实践:是的。您阐明了操作员不打算更改内容的意图。原因:如果
const Node*
优先级队列
的类型,该怎么办?非常量比较运算符根本无法编译。看起来很复杂,但我会试一试。谢谢,为什么要引用指针?Lambda不应该修改节点或其内容看起来很复杂,但我会尝试一下。谢谢,为什么要引用指针?Lambda不应修改节点或其内容
 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);