C ++中的数据结构是否有O(1)
查找?
std::map
有O(log(n))
个查询时间(对吧?)。
我正在寻找std
中的某些东西(所以不是Boost pls)。此外,如果有,它是如何工作的?
map
中的值相关联。所以我想要std::map<int,string>
之类的内容,find
和insert
应该O(1)
。
答案 0 :(得分:10)
数组有O(1)查找。 c ++ 11的Hashtable(std :: unordered_map)具有O(1)查找。 (摊销,但或多或少不变。)
我还想提一下,像地图这样基于树的数据结构具有很大的优势,而且只有log(n),这往往是不够的。
回答你的编辑 - &gt;您可以逐字地将数组的索引与其中一个值相关联。哈希表也是关联的,但是完美的哈希(每个键映射到1个值)真的很难得到。
另外值得一提的是:数组具有很好的缓存性能(由于局部性,也就是说。元素彼此相邻,因此可以通过prefecthing引擎预取它们以进行缓存)。树木,不是那么多。使用合理数量的元素,哈希性能可能比渐近性能更重要。
答案 1 :(得分:4)
使用 O(1)查找的数据结构(忽略密钥的大小)包括:
对于复杂类型,平衡树在 O(log n)处可以正常运行,或者有时您可以在 O(k)patricia trie >
答案 2 :(得分:3)
array有O(1)
次查询。