我正在学习一些STL函数,但我遇到了这个函数 lower_bound。我很困惑,为什么人们不使用 lower_bound 而不是二进制搜索,因为两者都做同样的事情,他们都有O(记录复杂性。
使用lower_bound编写一行代码而不是8-9行使用二分搜索的if-else语句是不是更好,或者是他们对lower_bound的任何限制我不知道因为哪些人没有经常使用它?
答案 0 :(得分:3)
binary_search
(IMO)命名不佳。它通过二进制搜索告诉您项目中是否存在项目。它没有告诉你在哪里。
lower_bound
告诉您项目应该在集合中的位置,但实际上并未验证该项目是否存在于集合中的该位置。你需要检查自己(并注意不要取消引用end
迭代器!)。
equal_range
告诉您项目的去向,以及(基于first
和second
之间的距离)该项目中实际存在多少项目,如果项目不存在。在我看来,它是最有用的。它比lower_bound
略慢但不是很多。