Нижняя граница против бинарного поиска
Я изучал некоторые функции STL и наткнулся на эту функцию lower_bound .Я в замешательстве, почему люди не используют lower_bound вместо бинарного поиска, поскольку оба делают одно и то же, оба имеют o(log n) сложность.
Не лучше ли написать только одну строку кода с lower_bound, чем 8-9 строк операторов if-else с бинарным поиском, или это их ограничение lower_bound, о котором я не знал, из-за которого люди не пользуетесь им часто?
1 ответ:
binary_search
is (IMO) плохо назван. Он сообщает вам с помощью бинарного поиска, существует ли предмет в вашей коллекции. Он не говорит вам, где именно.
lower_bound
указывает, куда должен попасть элемент в коллекции, но фактически не проверяет, существует ли элемент в этом месте коллекции. Вам нужно проверить себя (и будьте осторожны, чтобы не разыменовать итераторend
!).
equal_range
говорит вам, куда должен идти предмет, и (на основе расстояния междуfirst
иsecond
) как многие элементы действительно существуют в диапазоне, или ноль, если элемент не существует. На мой взгляд, это самое полезное. Это немного медленнее, чемlower_bound
, но не намного.