簡體   English   中英

設置priority_queue容器的優點

[英]Advantages of Setting priority_queue Container

使用stl priority_queue您可以設置基礎容器,例如vector 為stl priority_queue指定容器有哪些優點?

設置底層容器可以分離出兩個邏輯上獨立的問題:

  1. 如何存儲構成優先級隊列(容器)的實際元素,以及
  2. 如何組織這些元素以有效地實現優先級隊列( priority_queue適配器類)。

例如,當容量遠大於其實際大小時, vector的標准實現不需要自行縮小。 這意味着如果您有一個由vector支持的優先級隊列,如果您將許多元素排入隊列然后將所有元素出列,則可能最終浪費內存,因為vector將保留其舊容量。 另一方面,如果您實現自己的shrinking_vector類(實際上在需要時實際減少了它的容量),您可以獲得priority_queue接口的所有好處,同時更有效地使用存儲。

另一個可能的示例 - 您可能希望更改正在使用的分配器,以便從特殊資源池分配優先級隊列的元素。 您可以通過將priority_queue的容器類型設置為具有自定義分配器的vector來實現此目的。

還有一個想法 - 假設您正在存儲一個非常大的對象的priority_queue ,其復制時間非常長。 在這種情況下, vector動態調整自身大小並復制其舊元素(或者至少在C ++ 03編譯器中)的事實可能是您不願意支付的。 因此,您可以切換到其他類型,可能是deque ,它在調整大小時不會復制元素,並且可以實現一些重大的性能獲勝。

希望這可以幫助!

priority_queue類是適配器模式的示例。 它提供了一種在現有數據集上提供優先級隊列服務的方法。 作為適配器,它實際上需要一個底層容器。 默認情況下,它指定vector (從這里 )。

就優勢而言,它只是更靈活。 priority_queue使用后備存儲的以下方法,並要求它支持隨機訪問迭代器。

  • front
  • push_back
  • pop_back

通過將其作為適配器提供,您可以通過提供不同的實現來控制性能特征。

在STL中實現此功能的兩個示例是vectordeque 這兩者都具有不同的性能特征。 例如, vector通常在存儲器中是連續的,而deque通常不是。 向量中的push_back操作僅分攤常量時間(可能必須重新分配向量),而對於deque它是在常量時間內指定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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