簡體   English   中英

使用整數鍵和向量的映射之間的差異

[英]Difference Between Map with Integer Key and Vector

向量是帶有整數鍵的unordered_map的特殊形式嗎? 看起來是這樣,因為矢量也有整數鍵。

如果沒有,有什么區別?

Vector是一個數組周圍的容器。

無序映射是二叉樹周圍的容器。

這意味着它們具有不同的性能特征。 一些例子:

  • 通過索引訪問元素是向量/數組中的常量時間操作,但是是二叉樹中的對數時間操作。 兩者都很便宜,但在矢量上它甚至更快。
  • 增加向量的容量是昂貴的(線性時間),但對於二叉樹來說是便宜的(對數時間)。

主要區別在於數據的存儲方式。

vector將數據存儲在調整大小的內部數組中,並添加更多元素。 unordered_map在內部使用哈希表。

實際上, vector為您提供在后面分配的常量時間插入(它需要一次調整大小並復制/移動所有內容),通過索引進行常量時間訪問,以及最多線性時間插入和刪除(所有后續元素必須轉移)。 此外,由於vector是連續的,您可以將其傳遞給期望c樣式數組的函數。

unordered_map為您提供按密鑰分攤的常量時間(因為散列不完美,並且沖突會強制查找遍歷內部鏈接列表),分攤的常量時間插入和刪除。

請參閱: http//en.cppreference.com/w/cpp/container/unordered_map和: http//en.cppreference.com/w/cpp/container/vector

不, vector中的索引是連續的,在map它們不一定是。

此外, vector中的值保證在連續內存中,而不是在map

這兩者對於兩者的大多數操作意味着不同的復雜性。

暫無
暫無

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

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