簡體   English   中英

C ++無序映射常量時間訪問?

[英]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.

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