我有一个算法,该算法本质上采用类型为T
的元素,将其推入priority_queue
,然后采用队列的顶部元素,对其进行修改,更新堆,采用(可能new)top元素,依此类推。
我想尝试使用Boost heap库替换std :: priority_queue,以避免必须先由pop
后跟相同元素的push
来进行更新。但是,我似乎找不到一种方法来访问队列顶部的句柄以对其进行更新。
具体来说,似乎只有两种方法可以获取元素的句柄:
s_handle_from_iterator(it)
。但是,begin()
返回的迭代器不一定是堆栈的顶部,并且此方法不占用ordered_iterator
,所以看来我不走运吗?push(elem)
返回句柄。但是,使用它似乎意味着我必须将句柄存储在某个位置,可能存储在元素本身中,这似乎浪费了空间(并且在处理元素时浪费了时间)。有更好的方法吗?
请注意,对于稍微不同的用例(按顺序迭代整个堆),this answer似乎表明确实没有更好的方法...