С STL map / set / multiset / multimap, Как найти первое значение, большее или равное ключу поиска? - PullRequest
4 голосов
/ 07 октября 2008

Предположим, у меня есть набор значений, хранящихся в std :: set:

{1, 2, 6, 8}

и у меня есть ключ поиска, скажем, 3. Я хочу поместить 3 в функцию и получить первое значение, большее или равное 3, в этом случае я хотел бы получить 6.

Функция find (), предоставляемая в map / set / multimap / и set, конечно, возвратит конечный итератор для этого случая. Есть ли подобная функция для поиска, которая в этом случае вернула бы 6?

Ответы [ 3 ]

12 голосов
/ 07 октября 2008

Да: upper_bound(X) возвращает итератор, указывающий на первый элемент больше, чем X. Также есть функция lower_bound(X), которая возвращает итератор, указывающий на первый элемент, не менее чем X. Таким образом, все элементы в полуоткрытом интервале [lower_bound(X), upper_bound(X)) будут равны X.

3 голосов
/ 07 октября 2008

Требуется функция upper_bound .

map<int, int> mymap = { 1,2,6,8 };
map<int,int>::iterator i = mymap.upper_bound(3); // returns an iterator to the '6' element.
2 голосов
/ 07 октября 2008

lower_bound .

Упс, я имел в виду lower_bound , функция-член, а не алгоритм.

Если в наборе нет ничего, что больше или равно вашему элементу поиска, он вернет end ().

...