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