[英]Compression dictionary with very fast int->data lookups, and fast reverse lookups (search/insert/delete data)?
[英]Correct data structure for fast insert and fast search?
我有一個數組,我需要盡可能快地在其中插入項目。 在添加項目之前,我需要查看它是否存在,因此我要進行全陣列掃描。 我無法使用二進制搜索,因為每次插入后都無法對數組進行排序。
這項工作是否有更有效的數據結構?
編輯 :在該數組上,我存儲字符串。 在每個字符串旁邊,我存儲一個4字節的哈希。 我首先比較散列,如果它們相同,則字符串。
通常以( hashtable )實現的std::unordered_map
將為您提供最佳的插入/搜索時間(O(1)),但不保留也不提供任何順序。
std::map
為您提供O(log(n))進行搜索和插入,因為它需要特定的順序(而不是您必須插入的順序),並且通常使用平衡樹來實現。
如果需要排序順序和快速(O(log n))插入/搜索,則自定義平衡搜索樹是另一種選擇。
如果O(n)可以接受插入時間,但您需要最小的內存占用和O(log n)搜索時間,則排序std::vector
(以支持添加項的能力)是另一種選擇。 由於需要復制數組的其余部分,因此您需要以O(n)的排序順序插入項目。
如果您只需要使用數組('std :: vector'),則需要保留O(n)來進行插入/搜索,則需要保留原始順序。
除了“ std :: vector”之外,您還可以使用單獨的std::unordered_map
/ std::unordered_set
添加“已經存在”檢查,以提高速度的速度實質上是2-3倍的內存空間,並且在添加時需要更新2個結構項目。 此數組+哈希表組合將為您提供O(n)插入和O(1)搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.