2010-12-11 10 views
3

私はC++の大学プログラミングプロジェクトを2つの部分に分けています。私はpriority_queueshash tablesBSTのものを使用するはずの2番目の部分を始めました。優先待ち行列にリスト

私は最初の部分で既に実装されている多くのコードをやり直す必要があるので、(少なくとも)優先順位キューで問題があります。

空港管理システムを実装しているプロジェクトで、空港(メインクラス)、飛行機、ターミナル、フライトなどのクラスがあります。私の空港はlistのターミナルを持っていましたが、現在はのターミナルをpriority_queueのままにしておく必要があることをプロジェクトの仕様で指摘しています。

クラスごとに私はCRUD機能を持っていますが、今はどうすれば端末を編集してフライトを追加することができますか?リストでは、特定の位置に反復するだけでしたが、キューの上部にあるオブジェクトにしかアクセスできません。私が考えていた解決策は、優先キュー端末を一時的なリストにコピーすることでしたが、正直なところ、私はこのアプローチが嫌いです。

どうすればよいですか?

ありがとうございます。

+0

あなたがプライオリティキューからアイテムを取得する方法を知っていますか?優先順位キューに挿入する方法を知っていますか?あなたのユーザーインターフェイスの要件は何ですか?なぜ、あなたは 'Terminal 'を優先待ち行列に入れておく必要があると思いますか? –

+0

@Karl Knechtel:最初の要素を取り出す 'top()'、要素を挿入する 'push'、最初の要素を取り除く' pop'です。私は、実装のすべてのクラスにCRUD関数を持たせる必要があります。 **飛行機**の作成、**飛行**の作成、**端末の作成、**飛行機の運行、 ** **は**飛行機と '飛行機'を、**は**飛行機と 'ターミナル 'を関連付けます。私が 'add'を書いたところでは、他の** CRUD **関数(読み込み、更新、削除)で置き換えることができます。 –

+1

優先度キューを使用する必要がある場合は、優先度キューのみを使用できますか?または、優先順位キューとハッシュテーブルまたはBSTの両方に端末へのポインタを格納することを許可されていますか? – outis

答えて

2

効率的なキー操作で優先キューが必要なようです。独自の優先度キューの実装を自分で作成する方がよいかもしれません。

priority_queueコンテナは、動的セットに最適です。しかし、空港のターミナルの数はかなり固定されているので、アルゴリズムのヒープファミリーを持つ固定サイズのコンテナを使うことができます。

内部ストレージとして、ランダムアクセスイテレータ(ベクトル、配列、両端キュー)を提供する任意のコンテナを使用できます。次に、関数のmake_heap()、sort_heap()を使用して配列をヒープ化します。これで、top()に安くアクセスし、ヒープ内のランダムメンバーの優先順位を変更し、すべての要素を簡単に反復処理することができます。例えば

は、以下を参照してください。 http://www.cplusplus.com/reference/algorithm/make_heap/