C++ std::unordered_map 复杂度

标签 c++ stl iteration time-complexity unordered-map

我已经阅读了很多关于 unordered_map 的内容(c++11) 时间复杂度 在 stackoverflow,但我还没有找到问题的答案。

让我们假设按整数索引(仅作为示例):

Insert/at 函数持续工作(平均时间),所以这个例子需要 O(1)

std::unordered_map<int, int> mymap = {
            { 1, 1},
            { 100, 2},
            { 100000, 3 }
};

我很好奇的是迭代存储在 map 中的所有(未排序的)值需要多长时间 - 例如

for ( auto it = mymap.begin(); it != mymap.end(); ++it ) { ... }

我可以假设每个存储的值只被访问一次(或两次或常数次)吗?这意味着迭代所有值是在 N 值映射 O(N) 中。另一种可能性是我的带有键 {1,10,100000} 的示例最多可能需要 1000000 次迭代(如果用数组表示)

是否有任何其他容器可以线性迭代并通过给定键不断访问值?

我真正需要的是(伪代码)

myStructure.add(key, value) // O(1)
value = myStructure.at(key) // O(1)
for (auto key : mySructure) {...} // O(1) for each key/value pair = O(N) for N values

std::unordered_map 是我需要的结构吗?

整数索引就足够了,平均复杂度也是如此。

最佳答案

无论它们是如何实现的,标准容器都会提供满足迭代器要求的迭代器。递增迭代器需要是常数时间,因此遍历任何标准容器的所有元素是 O(N)。

关于C++ std::unordered_map 复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610457/

相关文章:

c++ - STL - 以下代码的问题是什么?

c++ - 是否有 std::function 的独立实现?

c++ - 在 C++ 中复制类似数据结构的任何模板方式、通用方法?

iteration - Puppet - 在迭代哈希时,如果 hiera 中不存在,则在 list 中设置默认值

python - 遍历 globals() 字典

c++ - 将 vector<Derived*> 放入需要 vector<Base*> 的函数中

c++ - 为什么需要将变量指向结构体

c++ - HTTP POST 的延迟来自哪里?

c++ - std::pair 是否存在类似 std::tie 的东西?

comparison - Volt 迭代与 Promise 的比较