![](/img/trans.png)
[英]What's the time complexity of iterating through a std::set/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的查找時間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.