std::map中find()的时间复杂性

Time complexity of find() in std::map?

本文关键字:时间复杂性 find map std      更新时间:2023-10-16

find()函数在std::map类上的效率有多高?它是在所有元素中迭代寻找键,使其为O(n),还是在平衡树中,还是使用哈希函数?

Log(n)它基于一个红黑树。

Edit:n当然是地图中成员的数量。

std::mapstd::set由编译器供应商使用高度平衡的二进制搜索树(如红黑树、AVL树)实现。

正如David正确指出的,find将花费O(logn)时间,其中n是容器中元素的数量。

但这是针对intlongchardouble等基元数据类型,而不是字符串。

如果使用std:string(比如大小为"m")作为关键字,则遍历平衡二进制搜索树的高度将需要将给定关键字与树的一个条目进行logn比较。

std::stringstd::mapstd::set的密钥时,findinsert操作将花费O(m log n),其中m是需要找到的给定字符串的长度。

它不迭代所有元素,而是进行二进制搜索(即O(log(n))。它使用运算符<或者比较器来进行搜索。

如果你想要一个散列映射,你可以使用一个std::unordered_map(添加在C++-0x上),它使用一个散列函数,平均值(取决于你提供的散列函数和数据)find()将是O(1)。