<алгоритм> функция для поиска последнего элемента, меньшего или равного, например, lower_bound

Есть ли функция, которая использует бинарный поиск, например 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;
40
задан jterm 8 November 2016 в 22:09
поделиться