STL 和提升优先级队列的接口包括
T const & top () const;
void pop ();
后者删除顶部元素。但是,如果我想在 pop() 之后继续使用该元素,并且想避免复制呢?例如,假设我有一个priority_queue<T> pq
. 我想写
const T& first = pq.top();
pq.pop();
const T& second = pq.top();
analyze(second);
analyze(first); // first *after* second
不幸的是,一旦我 pop(),第一个引用就变得无效,所以我得到一个段错误。
我更喜欢 java's 之类的解决方案nextElement()
,它返回top()
并执行 a pop()
,但仅当元素超出范围时才会删除该元素。这样我就不需要跟踪什么pop()
和什么时候。但是,usingpriority_queue<shared_pointer<T> >
似乎没有帮助,因为将 ref 指向 ashared_pointer
并不会增加其 use_count。
如果它很重要,我更喜欢使用boost::fibonacci_heap
它的高效push()
.
任何想法或指示?谢谢!