[英]STL iterable container like priority_queue
我是STL容器(和C ++)的新手,所以我想向社區尋求幫助。 我基本上想擁有一個支持常量迭代的priority_queue
。 現在,似乎std::priority_queue
不支持迭代,因此我將不得不使用其他東西,但是我不確定到底是什么。
要求:
一種選擇是保留一個priority_queue
並分別具有一個unordered_set
的引用,但是我寧願不要有兩個浮動的容器。 我也可以使用deque
並搜索正確的插入位置,但我寧願讓容器為我管理排序(並且恆定時間插入比線性時間更好)。 有什么建議么?
有兩種選擇:
1)實現你自己的迭代優先級隊列,使用std::vector
和堆操作算法(參見堆操作 在這里 )。
2)(私下)從priority_queue
派生。 這使您可以通過數據成員c
訪問底層容器。 然后,您可以在公共接口中公開迭代,隨機訪問和其他感興趣的方法。
使用std :: vector可能已足夠,正如其他人已經指出的那樣,但是如果您想已經准備好實現,則可以使用Boost.Heap(這是一個具有多個優先級隊列容器的庫): http : //www.boost.org/ doc / libs / 1_53_0 / doc / html / heap.html
Boost是基本完成標准庫(不是很大)的庫的集合。 許多C ++開發人員已經准備好在其開發計算機上使用它們,以便在需要時使用它。 選擇庫時要小心。
您可以將(有序)設置為隊列。 set.begin()將是您的頂部元素,您可以通過delete(set.begin())將其彈出。
您是否觀察到了堆( std :: make_heap )? 它沒有在隊列中排序,但是具有您需要的優先級“從列表頂部彈出”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.