簡體   English   中英

在集合中查找最快的 C++ 容器是什么<integer, std::string></integer,>

[英]What is the fastest C++ container for lookup in a collection of <integer, std::string>

查找將通過 integer 或字符串完成。 integer 和字符串都保證在集合中是唯一的。 該系列的大小約為 500 對。

集合的接口將是 2 個函數,一個將 integer 轉換為字符串,一個將字符串轉換為相應的 integer。

似乎沒有方法來挑選“合適的”容器。

一個想法是使用 std::vector,這是默認設置,因為它將存儲在連續的 memory 中,我們確保緩存命中? 但是我在編譯時知道集合的大小,所以 std::array?

或者因為順序不重要但查找需要快速我們可以使用基於 hash 的解決方案,如 std::map? 但是什么是關鍵,什么是價值呢? 或者一個人可以有 2 個 std::maps (std::map<int, std::string> and std::map(std::string, int)) 和重復的信息,因為無論如何集合很小。

我知道最終的答案是對其進行基准測試,但我想知道是否有任何實際的方法可以根據原則知道選擇什么。

std::map 是一個已排序的關聯容器,其中的鍵已排序。 它使用高度平衡樹實現,其中搜索、刪除和插入操作具有對數復雜度。

由於不需要鍵排序,使用 std::unordered_map 會更有效率。 Unordered map 是一個關聯容器,其中元素的搜索、插入和刪除具有平均恆定時間復雜度。

擁有 2 個 unordered_maps 將為每個搜索操作提供 O(1) 時間。

暫無
暫無

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

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