c++ - 关联容器的 lower_bound 复杂度 : member function vs non-member function

标签 c++

setmaplower_bound(以及 upper_boundequal_range ) 具有 Log(N) 时间复杂度的成员函数。还有非成员 lower_bound 可以通过包含 algorithm header 获得。根据描述,非成员函数的复杂性对于随机访问迭代器是 Log(N),否则是线性的。 setmap 迭代器不是随机访问。这是否意味着我应该避免使用非成员函数?

最佳答案

std::lower_bound旨在用于由一对迭代器定义的排序范围,通常是来自某个容器的 beginend 。如果您将它与来自 std::setstd::map 的双向(非随机访问)迭代器一起使用,那么它将必须线性遍历范围,与随机访问迭代器不同。方法 std::set::lower_boundstd::map::lower_bound存在是因为它可以利用容器的内部结构比其自由功能对应物执行得更好。所以是的,确实,如果可以的话,在使用 std::setstd::map 时,您应该喜欢这种方法。

关于c++ - 关联容器的 lower_bound 复杂度 : member function vs non-member function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53088504/

相关文章:

c++ - 即使我重载分配也没有可行的重载 '='错误

c++ - 如何跨多个源文件声明和使用全局外部变量?

c++ - 使用元编程计算log2但是 `compilation terminated`

c++ - 使用字符串键在映射数组中查找索引值

c++ - Xcode 中的警告不正确?

C++ cUrl通过api向 Telegram Bot 发送图像buff

c++ - 如何在 Web 服务器中使用 C++ 应用程序?

c++ - 与 Direct3D SpriteBatch 混合

c# - 应用程序在非开发系统上崩溃

c++ - 如何使用 WinDbg 查找 `GetProcAddress` 函数的过程名称