std::map中find()的时间复杂性
Time complexity of find() in std::map?
find()函数在std::map类上的效率有多高?它是在所有元素中迭代寻找键,使其为O(n),还是在平衡树中,还是使用哈希函数?
Log(n)它基于一个红黑树。
Edit:n当然是地图中成员的数量。
std::map
和std::set
由编译器供应商使用高度平衡的二进制搜索树(如红黑树、AVL树)实现。
正如David正确指出的,find
将花费O(logn)时间,其中n是容器中元素的数量。
但这是针对int
、long
、char
、double
等基元数据类型,而不是字符串。
如果使用std:string
(比如大小为"m")作为关键字,则遍历平衡二进制搜索树的高度将需要将给定关键字与树的一个条目进行logn比较。
当std::string
是std::map
或std::set
的密钥时,find
和insert
操作将花费O(m log n),其中m是需要找到的给定字符串的长度。
它不迭代所有元素,而是进行二进制搜索(即O(log(n))。它使用运算符<或者比较器来进行搜索。
如果你想要一个散列映射,你可以使用一个std::unordered_map(添加在C++-0x上),它使用一个散列函数,平均值(取决于你提供的散列函数和数据)find()将是O(1)。
相关文章:
- 具有未知值时的时间复杂性
- 使用堆查找第K个最大元素的时间复杂性
- 解决这个问题的时间复杂性是多少
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 对于像C++这样的现实世界语言,时间复杂性有什么一致的定义吗
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 是平衡二进制树上预购和DFS的时间复杂性
- 带有多个内部回路的循环的时间复杂性
- 列表STL的时间复杂性在一段时间内进行排序
- O(2M N)和O(kN)的时间复杂性
- 映射向量的时间复杂性是多少
- 时间复杂性差异以及如何
- 递归最糟糕的情况时间复杂性
- 可传递值影响递归算法的渐近时间复杂性
- 程序的时间复杂性确定两个字符串是否彼此排列
- 为什么此代码O(n)的时间复杂性
- next_perMuart的时间复杂性在大o符号中
- C 中使用了哪种类型的堆以及STD :: Pirstity_queue的时间复杂性
- 带有两个递归调用的递归算法的时间复杂性
- std::map中find()的时间复杂性