将节点引入优先级队列(迭代器)

时间:2015-06-24 14:20:12

标签: c++

我正在尝试使用priority_queue实现Dijkstra的算法(因为我需要跟踪到源节点的最近节点)。

问题是:在探索节点时,可能会发生链接到尚未在优先级队列中发现的另一个节点(即优先级队列的元素)。

似乎优先级队列不支持迭代器,在发现与之关联的节点时,如何引用到优先级队列元素?

1 个答案:

答案 0 :(得分:0)

std::priority_queue<T>既不支持迭代器也不支持降低/增加节点优先级的接口:仅更改元素的优先级不会更新数据结构。您需要的是基于节点的std::priority_queue<T>版本。 Boost中有专门用于此目的的队列。

虽然它不会很复杂,但可以使用std::priority_queue<T>用于Dijkstra的算法:而不是存储您存储边缘的节点从访问节点到可能未访问的节点,优先级是使用给定边缘时目标节点的距离。弹出元素时,您需要检查之前是否访问过该节点。复杂性将是O(m log m)而不是O(m log n),但(n是节点数,m是边数。)