簡體   English   中英

std :: map的時間復雜度是多少?

[英]What is the time complexity of std::map

std :: map的時間復雜度是多少? 它會在最糟糕的情況下墮落嗎? 或者由實施決定,我們無法知道嗎?

查找與log(N)成比例。 在典型情況下(作為紅黑樹實現),比較的數量可以是Log 2 N的兩倍。

插入通常也與Log 2 N成比例 - 但是當您插入已經按順序1的多個項目時,會有一個特殊的規定。 在這種情況下,您可以指定插入位置的“提示”。 當該提示正確時,每個插入都是(攤銷)O(1)而不是O(Log N),因此按排序順序插入一系列項目是線性的而不是N log(N)。 您指定的提示是要插入項目之后的位置的迭代器。

例如,如果文件中有多個項目按排序順序排列,並且您希望將它們插入到地圖中,則可以將your_map.end()指定為“提示”,並且構建地圖將具有O(N )復雜性而不是O(N Log N)復雜度。


1.從技術上講,這適用於您插入物品的任何時候,而不僅僅是當您按順序插入物品時 - 但到目前為止,您有合理的“提示”可用的最常見情況是您按順序插入物品時。

通常,時間復雜度是為操作指定的。 在您的情況下, 查找插入似乎相關。

有關STL容器的保證完整性,請訪問http://www.sgi.com/tech/stl/complexity.html 關於Associative Containers的這個http://www.sgi.com/tech/stl/AssociativeContainer.html

另一個來源是:

std :: map的查找是log(地圖中元素的數量)。

這取決於實現,您不能僅通過查看語言規范將任何類型的復雜性與std::map相關聯。

通常std::map實現為紅黑樹 ,您可以在此處找到有關此類容器的Big-O屬性的所有信息。

值得注意的是,與流行的編譯器(如msvcgcc一起提供的標准庫不太流行,可以使用B-tree實現這種容器,這會導致內存使用量降低,因為B樹通常占用較少的內存。內存那個RB樹。

例如, 點擊這里

如果你問std :: map的查找時間compexity那么那將是O(log(n)),因為stl將std :: map庫實現為樹(二叉樹)數據結構。

更多信息請訪問: http//www.cplusplus.com/reference/map/map/

這里也是常用的std :: unordered_map,它是你的hashmap(沒有排序因此),具有O(1)查找速度,但是,根據數據結構的設計使用比Tree更多的內存。

暫無
暫無

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

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