2010-12-11 129 views
3

我有一個C++的大學編程項目分爲兩部分。我開始使用priority_queues,hash tablesBST的第二部分。列表到優先隊列

我在使用優先級隊列的麻煩(至少),因爲它承付自己重做了很多的第一部分已經實現的代碼。

該項目是關於實施簡單的機場管理系統,因此,我有像機場(主類),飛機,終端和飛行類。我有機場終端的list,但現在項目規範指出,我必須保持終端的priority_queue其中頂部包含終端少佔用,即具有較小的航班。

對於每個類,我有CRUD功能,但現在,我怎麼,例如,編輯終端和飛行補充呢?有了列表,我只需迭代到一個特定的位置,但現在我只能訪問隊列頂部的對象。我想過的解決方案是將優先級隊列終端複製到臨時列表中,但是,老實說,我不喜歡這種方法。

我該怎麼辦?

在此先感謝。

+0

你知道如何從優先級隊列中檢索項目?你知道如何插入優先隊列嗎?準確的用戶界面有什麼要求?爲什麼你確實認爲你被要求將終端保存在一個優先級隊列中? – 2010-12-11 12:42:51

+0

@Karl Knechtel:'top()'檢索第一個元素,'push'插入一個元素並且'pop'去除第一個元素。我需要在實現中爲每個類添加CRUD函數。如果你有一個機場來管理,系統必須讓用戶執行所有的典型操作:**創建**'飛機',**創建**'航班',**創建**終端, **聯合**'飛機'和'航班',**聯合**'航班'和'終端'。在我寫'添加'的地方,它可以被其他** CRUD **函數(讀取,更新和刪除)替代。 – 2010-12-11 12:51:46

+1

當您必須使用優先級隊列時,您只能使用優先級隊列嗎?或者,您是否允許在優先級隊列和散列表或BST中存儲指向終端的指針? – outis 2010-12-11 12:58:31

回答

2

這聽起來像你需要一個優先級隊列,有效地增加和減少關鍵操作。您可能會更好地創建自己的自己的優先級隊列實現。

priority_queue容器非常適合動態集。但是由於機場中的終端數量幾乎是固定的,你可以使用堆算法家族的一個固定大小的容器。

作爲內部存儲,可以使用可提供隨機訪問迭代器(矢量,陣列,雙端隊列)的任何容器。然後,使用make_heap(),sort_heap()系列函數來對數組進行heapify。現在,您可以便宜地訪問top(),修改堆中隨機成員的優先級並輕鬆遍歷所有元素。

舉個例子看看: http://www.cplusplus.com/reference/algorithm/make_heap/