关联容器的lower_bound复杂度:成员函数与非成员函数

时间:2018-10-31 16:53:33

标签: c++

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

1 个答案:

答案 0 :(得分:6)

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