std::lower_bound
работает правильно.Функция возвращает первый элемент, который не меньше предоставленного значения.Поскольку 9 - это первое значение, которое не меньше 5, вы получите этот элемент.
std::upper_bound
в этом случае вернет тот же элемент, так как он возвращает первый элемент больше указанного значения.Здесь вы увидите разницу, например
std::vector data = {4,4,4};
auto low = std::lower_bound(data.begin(), data.end(), 4);
auto high = std::upper_bound(data.begin(), data.end(), 4);
. В этом случае low
будет begin()
, так как 4 не меньше 4, а high
будет end()
, поскольку элемент отсутствуетбольше 4 в векторе.