set 和 map 具有 lower_bound (以及 upper_bound 和 equal_range )具有Log(N)时间复杂度的成员函数。还包括非成员 lower_bound ,可以通过包含 algorithm 标头来使用。根据描述,非成员函数的复杂度对于随机访问迭代器为Log(N),否则为线性。 set 和 map 迭代器不是随机访问。这是否意味着我应该避免使用非成员函数?
答案 0 :(得分:6)
std::lower_bound
旨在用于由一对迭代器定义的排序范围,这些迭代器通常来自某个容器的begin
和end
。如果将它与来自std::set
或std::map
的双向(非随机访问)迭代器一起使用,则与随机访问迭代器不同,它将必须线性遍历该范围。之所以存在方法std::set::lower_bound
和std::map::lower_bound
是因为它可以利用容器的内部结构比其自由函数副本更好地执行。因此,是的,的确,如果可以的话,在使用std::set
或std::map
时,应该偏爱这种方法。