Предположим, у меня есть набор значений, хранящихся в std :: set:
{1, 2, 6, 8}
и у меня есть ключ поиска, скажем, 3. Я хочу поместить 3 в функцию и получить первое значение больше или равное 3, в этом случае я хотел бы получить 6.
Функция find (), представленная в map / set / multimap / и set, конечно же, вернет конечный итератор для этого случая. Можно ли найти аналогичную функцию, которая в этом случае вернет 6?





Вам нужна функция верхняя граница.
map<int, int> mymap = { 1,2,6,8 };
map<int,int>::iterator i = mymap.upper_bound(3); // returns an iterator to the '6' element.
Ой, я имел в виду нижняя граница, функцию-член, а не алгоритм.
Если в наборе нет ничего, что больше или равно вашему элементу поиска, он вернет end ().
Да: upper_bound(X) возвращает итератор, указывающий на первый элемент, больший, чем X. Также существует функция lower_bound(X), которая возвращает итератор, указывающий на первый элемент не ниже X. Таким образом, все элементы в полуоткрытом интервале [lower_bound(X), upper_bound(X)) будут равны X.
Не «равно X», но эквивалентно. Например, в наборе <string> без учета регистра нижняя граница «ABC» может быть «abc». А для std :: set «все элементы в полуоткрытом интервале» будут не более 1 элемента.