[英]Advantages of Setting priority_queue Container
使用stl priority_queue
您可以設置基礎容器,例如vector
。 為stl priority_queue
指定容器有哪些優點?
設置底層容器可以分離出兩個邏輯上獨立的問題:
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中實現此功能的兩個示例是vector
和deque
。 這兩者都具有不同的性能特征。 例如, vector
通常在存儲器中是連續的,而deque
通常不是。 向量中的push_back
操作僅分攤常量時間(可能必須重新分配向量),而對於deque
它是在常量時間內指定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.