![]() |
1
3
你可以自己做:
|
![]() |
2
4
如果我们仔细看一下你的陈述:
为了治疗
也就是说,后面:
或者前面:
否则你需要用
摘要
使用标准库(即函数模板)不可能修改堆的任意元素并在对数运行时间内实现堆化。
|
![]() |
3
1
我也一直面临着需要一个“可更新堆”的问题。但是,最后,我没有编写自定义可更新堆之类的代码,而是用了一点不同的方法解决了这个问题。 为了在不需要显式遍历堆的情况下保持对最佳元素的访问,可以使用要排序的元素的版本化包装器。每个唯一的true元素都有一个版本计数器,每次更改元素时都会增加这个计数器。然后堆中的每个包装都携带元素的一个版本,即创建包装时的版本:
当从堆中弹出最上面的元素时,您可以简单地检查这个包装器元素,看看它是否与原始元素最新。如果不是,简单地处理它,弹出下一个。这种方法非常有效,我在其他应用程序中也看到过。唯一需要注意的是,您要不时地对堆进行一次传递,以清除过时元素(例如,每1000次插入大约一次)。 |
![]() |
4
0
It's not possible
仅使用函数模板在对数运行时间内修改堆的任意元素而不违反堆属性
但是,您可以定义自己的类似stl的函数模板,
然后,您可以提供以下简化的重载
此重载使用
例子
在你的
最大值堆
例子,
你可以用
那怎么办 闽 堆?
你也可以通过
小顶堆
通过一个
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |