C++ 中是否有带有O(1)
查找功能的数据结构?
Astd::map
有O(log(n))
查找时间(对吗?)。
我正在寻找std
最好的东西(所以不是Boost pls)。另外,如果有,它是如何工作的?
编辑:好的,我猜我还不够清楚。我想关联值,有点像map
. 所以我想要一些类似的东西std::map<int,string>
,find
并且insert
应该采取O(1)
。
C++ 中是否有带有O(1)
查找功能的数据结构?
Astd::map
有O(log(n))
查找时间(对吗?)。
我正在寻找std
最好的东西(所以不是Boost pls)。另外,如果有,它是如何工作的?
编辑:好的,我猜我还不够清楚。我想关联值,有点像map
. 所以我想要一些类似的东西std::map<int,string>
,find
并且insert
应该采取O(1)
。
数组具有 O(1) 查找。c++11 的哈希表 (std::unordered_map) 具有 O(1) 查找。(摊销,但或多或少是恒定的。)
我还想提一下,像地图这样的基于树的数据结构具有很大的优势,并且只有 log(n),这往往是不够的。
回答您的编辑 - >您可以将数组的索引与其中一个值相关联。哈希表也是关联的,但完美的哈希(每个键映射到恰好 1 个值)确实很难获得。
值得一提的另一件事是:数组具有出色的缓存性能(由于局部性,也就是元素彼此相邻,因此它们可以被 prefecting 引擎预取到缓存)。树,不多。在元素数量合理的情况下,哈希性能可能比渐近性能更为关键。
数组有O(1)
查找。