私はstd :: priority_queueを使用して、3Dグリッド上のデータセットの距離関数を計算するアルゴリズムを作成しています。キューを初期化した後は、std :: queue.back()と同様に、別の変数に最後の要素を格納したいと思いますが、もちろん、これはプライオリティキューでは不可能なので、私の回避策以下れる:もちろんpriority_queueの最後の要素を抽出する
CellQueue q; //this is the actual priority_queue
//...
//initialization
//...
Cell* last = 0;
CellQueue dummy(q);
while (!dummy.empty()) {
last = dummy.top();
dummy.pop();
}
この問題を解決するための良い方法はありますので、誰かが私にそれを示すことができる場合、私は非常に喜んでいると思います。
おかげで、
フェデリコ
EDIT
@Sam @Dietmar距離関数(DF)を計算するアルゴリズムは、このように動作します:あなたはの細胞とPRIORITY_QUEUEを埋めますグリッドはデータセットの少なくとも1つのポイントを含み、距離順に並べ替えられます(このステップではゼロです)。次に、キューの各要素について、隣人を訪問し、各隣人について、その親に関して距離を計算します。さて、効率の理由から、私はデータセットの周りの狭いバンドでのみDFを計算したいと思います。ですから、第3リング近隣を訪れた後にこのプロセスを止めるには、現在のリングの最後の要素を追跡しなければなりません。
必要な機能を備えた実装をどのように拡張しましたか? – maxik
これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。どのような問題を解決しようとしていますか?いいえ、優先度キューに最後の要素を別々に格納するのではなく、最後の要素を優先度キューに格納することが解決策であると考えるところで解決しようとしている実際の問題です。 –
優先度キューの最後の要素を取得する目的は何ですか?もしそれが実際にあなたが興味を持っている要素であれば、優先順位キューを別の方法で並べ替えることができ、それは 'top()'要素になります。 –