簡體   English   中英

STL可迭代容器,例如priority_queue

[英]STL iterable container like priority_queue

我是STL容器(和C ++)的新手,所以我想向社區尋求幫助。 我基本上想擁有一個支持常量迭代的priority_queue 現在,似乎std::priority_queue不支持迭代,因此我將不得不使用其他東西,但是我不確定到底是什么。

要求:

  • 保持插入順序(例如優先級隊列)
  • 從列表頂部彈出
  • 獲得對列表中每個元素的const訪問權限(此階段無關隊列中的順序)

一種選擇是保留一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM