[英]C++ Unordered Map Constant Time Access?
我正在研究C ++ unordered_map容器類型。 我只是驗證我從C ++網站上讀取的有關operator []的元素訪問的內容。
它說時間復雜度通常是恆定的,但最壞的情況是線性時間。 由於我的應用程序必須保證對此映射內部元素的持續時間訪問,因此我想驗證我對此容器的理解。
每當我的應用程序訪問此unordered_map中的元素時,它所尋找的對象都保證存在,因此容器將永遠不會嘗試添加缺少的元素。 由於我只是在查看 ,這是否意味着unordered_map總是會給我一些時間訪問 ? 線性時間情況僅適用於發生插入的某些情況,這是正確的嗎?
編輯:unordered_map內的元素保證是唯一的。 它們保存內存中存在的幾個唯一對象的地址。
查找取決於是否存在任何現有元素的哈希沖突,在這種情況下,元素放在同一個桶中,並且必須使用相等比較進行線性搜索。 最糟糕的情況是一切都在同一個桶里。
因此,您可以擁有具有線性查找時間復雜度的只讀映射,但如果您可以保證現有元素不會發生沖突,則可以保證O(1)查找。
錯誤。
只要沒有哈希沖突,哈希映射就會有插入和查找的O(1)
時間。 如果存在哈希沖突,則復雜度為O(m)
,其中m
是與請求的哈希沖突的數量 - 如果所有哈希沖突,則最多為n。
構建一個所有哈希碰撞的案例是微不足道的, 避免這種情況遠非瑣碎,特別是如果有敵對攻擊者給出鑰匙。
如果需要保證時間范圍,請使用樹形圖,即O(log n)
進行查找和插入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.