私はDijkstra's Algorithmと書いていますが、最短距離のノードを最上位に保っている優先キューを持っています。しかし、グラフをたどると、その頂点までの距離が更新されます。私は、データ構造体に含まれる優先度キューのすべての頂点への参照を配置しました。データ構造内の頂点を更新するときに、優先キューのデータがこれらの変更に適応するようにしたいので、最も近いノードは常に上にあります。しかし、私のアプリケーションをデバッガでステップ実行した後、優先度キューが更新されないことに気付きました。すべての頂点をその中に再挿入することなく、これをどうやって行うのですか?内部データへの参照を変更するときにSTL優先度キューを更新する
5
A
答えて
4
STL priority_queueは、push()およびpop()メソッドのみを使用してデータ構造を変更することを前提としています。データ構造の変更は追跡されません。
priority_queueの基になるコンテナの内部を変更した後、ヒーププロパティを復元するには、コンテナでmake_heap()を呼び出す必要があります。 STL priority_queueは、基になるコンテナにイテレータを提供しません。代わりに、dequeまたはベクトルを優先度キューとして手動で管理し、必要に応じてmake_heap()、push_heap()およびpop_heap()を呼び出す必要があります。
関連する問題
- 1. LinkedListを優先度キューに変更する
- 2. カスタムGCDキューの優先度を変更する方法は?
- 3. スレッドの優先度を変更する
- 4. Androidの内部クラス - 親への参照を変更する
- 5. 同時変更可能な優先度キュー
- 6. 優先度キュー - バイナリヒープ
- 7. Java優先度キュー
- 8. Linuxのスレッド優先度とスケジューラを変更する
- 9. Javaの優先度キュー
- 10. cリンクリストの優先度キュー
- 11. Erlangでプロセスの優先度を変更できますか?
- 12. Javaのヘルプ:優先度つきキュー
- 13. Objective-c優先度キュー
- 14. 要素の優先度が変更されたときにJava PriorityQueueを更新します
- 15. nice()は、スレッドの優先度やプロセスの優先度を変更するために使用されますか?
- 16. Symfony 2でイベントハンドラの優先度を変更する方法
- 17. Windowsでブーストスレッドの優先度を変更する
- 18. 優先順位キューの優先順位を変更して、要素の順序を維持する
- 19. TFSビルドの一部として「Web参照」を更新する
- 20. スレッドプールと優先度キューを使用するスケジューラ?
- 21. w3wpが自動的に優先度を変更します
- 22. サブクエリ内で自己参照付き行を更新する
- 23. Linuxのリアルタイムプロセスの優先度を変更していますか?
- 24. const std :: stringリファレンスの参照先を変更する
- 25. VS2008はソリューションフォルダのアセンブリへのGAC参照を優先します
- 26. Brodal優先度キューの実装
- 27. アプリケーション優先度を変更する方法Windows用のGolangでプログラム的に?
- 28. 内部インデックスへの参照?
- 29. スキーム:リストから何かを削除して優先度を更新する
- 30. C++で反復可能な優先度キューを実装する
いずれかの項目が変更されていることがわかっているため、独自の実装を記述してください。make_heap()はそうではありません。 –
@MtnViewJohnサンプルがありますか?またはコードのスニップビットですか?非常に小さな例を完全に必要としない –
SGIのpriority_queueの実装に対する[link] [1]があります。これをコピーし、その内容を変更するためにmake_heap()を呼び出してヒープを修正する修正メソッドを含めるように拡張することができます。 @ NathanSの提案も非常に良いです:あなたはすぐに各ノードを変更するので、ヒーププロパティを維持するために必要なヒープ回転操作を実行します。 [1] http://www.sgi.com/tech/stl/stl_queue.h – MtnViewJohn