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() するとすぐに最初の参照が無効になるため、segfault が発生します。
私は java の のようなソリューションを好みnextElement()ます。これは を返しtop()て実行しますpop()が、要素が範囲外になった場合にのみ要素を削除します。そうすれば、何をいつ行うかを追跡する必要がなくなりpop()ます。ただし、参照を aに取得しても use_count が増加しない priority_queue<shared_pointer<T> >ため、使用は役に立たないようです。shared_pointer
boost::fibonacci_heapそれが重要な場合、私はその効率的な使用を好みますpush()。
アイデアや指針はありますか?ありがとう!