Есть ли функция, которая использует бинарный поиск, например lower_bound
, но которая возвращает последнийэлемент меньше чем или равнов соответствии с заданным предикатом?
Lower_bound
определяется следующим образом:
Находит позицию первогоэлемента в упорядоченном диапазоне, значение которого больше или равно указанному значению, где критерий упорядочения может быть указан бинарным предикатом.
и upper_bound
:
Находит позицию первогоэлемента в упорядоченном диапазоне, значение которого больше, чемзаданное значение, где критерий упорядочения может быть указан бинарным предикатом.
В частности, у меня есть контейнер событий, упорядоченных по времени, и для заданного времени я хочу найти последний элемент, который появился раньше или в этот момент. Могу ли я добиться этого с помощью некоторой комбинации верхней/нижней границы, обратных итераторов и использования std::greater
или std::greater_equal
?
РЕДАКТИРОВАТЬ: Требовалась настройка для предложения пользователя 763305, чтобы справиться с запросом точки перед началом массива:
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;