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()
。
アイデアや指針はありますか?ありがとう!