Нижняя граница против бинарного поиска


Я изучал некоторые функции STL и наткнулся на эту функцию lower_bound .Я в замешательстве, почему люди не используют lower_bound вместо бинарного поиска, поскольку оба делают одно и то же, оба имеют o(log n) сложность.

Не лучше ли написать только одну строку кода с lower_bound, чем 8-9 строк операторов if-else с бинарным поиском, или это их ограничение lower_bound, о котором я не знал, из-за которого люди не пользуетесь им часто?

1 2

1 ответ:

binary_search is (IMO) плохо назван. Он сообщает вам с помощью бинарного поиска, существует ли предмет в вашей коллекции. Он не говорит вам, где именно.

lower_bound указывает, куда должен попасть элемент в коллекции, но фактически не проверяет, существует ли элемент в этом месте коллекции. Вам нужно проверить себя (и будьте осторожны, чтобы не разыменовать итератор end!).

equal_range говорит вам, куда должен идти предмет, и (на основе расстояния между first и second) как многие элементы действительно существуют в диапазоне, или ноль, если элемент не существует. На мой взгляд, это самое полезное. Это немного медленнее, чем lower_bound, но не намного.