Есть ли функция, в которой используется двоичный поиск, например lower_bound
, но который возвращает последний элемент меньше или равный-в соответствии с заданным предикатом?
lower_bound
определяется как:
Определяет позицию первого элемента в упорядоченном диапазоне, который имеет значение, большее или эквивалентное заданному значению, где критерий упорядочения может быть задан двоичным предикатом.
и upper_bound
:
Определяет позицию первого элемента в упорядоченном диапазоне, значение которого больше заданного значения, где критерий упорядочения может быть задан двоичным предикатом.
В частности, у меня есть контейнер событий, упорядоченных по времени, и в течение определенного времени я хочу найти последний элемент, который был до или в этот момент. Могу ли я достичь этого с помощью комбинации верхних/нижних границ, обратных итераторов и используя std::greater
или std::greater_equal
?
EDIT: Для решения user763305 необходимо было выполнить настройку, если вы попросите точку до начала массива:
iterator it=upper_bound(begin(), end(), val, LessThanFunction());
if (it!=begin()) {
it--; // not at end of array so rewind to previous item
} else {
it=end(); // no items before this point, so return end()
}
return it;