|
|
1
7
我认为您在标准优先级队列方面不太走运,因为您无法获得底层deque/vector/list或其他什么。你需要实现你自己的-这并不难。 |
|
|
2
41
我可以建议两个选项来解决这个问题,尽管它们都没有执行真正的更新。
似乎两种方法的复杂性是相同的。 |
|
|
3
5
使用STL(我知道)进行此操作的最简单方法是删除条目,更新其优先级,然后重新插入。使用std::priority_队列执行此操作非常缓慢,但是可以使用std::set执行相同的操作。不幸的是,当对象在集合中时,必须小心不要更改其优先级。 我已经实现了一个基于可变优先级的队列类,将一个std::multimap(用于优先级到值的映射)和一个std::map(用于值到优先级的映射)粘合在一起,它允许您插入/删除项,以及以对数时间更新现有值。您可以得到代码和如何使用它的示例 here |
|
|
4
5
适当的数据结构称为“斐波那契堆”。 但你需要自己实现它。 插入/更新为O(1) 萃取物最小值为O(logn) |
|
|
5
1
我实现了一个高性能的可更新优先级队列并使其可用 on github . 这是您通常使用它的方式:
以补充Jarekczek的回答,如果确实
但是,在少数基本节点上进行大量更新时,set方法可能更快。这也是使用我的库会给您带来最大改进的地方。 |
|
|
7
0
很遗憾,您无法更新优先级队列中的值。优先级队列不提供此类接口。
我想你最好用一下
|
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |