2008-10-06 29 views
3

假设我有一组值,存储在一个std ::集:使用STL map/set/multiset/multimap,如何找到大于或等于搜索关键字的第一个值?

{1,2,6,8}

,我有一个搜索关键字,比如说,3。我希望把3变成一个函数,并得到第一个值大于或等于3,在这种情况下,我想得到6.

当然,map/set/multimap /中提供的find()返回这种情况下的结束迭代器。有没有类似的功能找到在这种情况下会返回6?

回答

11

是:upper_bound(X)返回指向大于X的第一个元素的迭代器。还有一个lower_bound(X)函数,它返回一个迭代器,指向不小于X的第一个元素。因此,半开区间[lower_bound(X), upper_bound(X))中的所有元素将等于X.

+0

不等于X,但等效。例如,在不区分大小写的集合中,“ABC”的lower_bound可以是“abc”。 对于std :: set,“半开区间内的所有元素”最多只有1个元素。 – MSalters 2008-10-07 12:07:51

3

你想要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

lower_bound

糟糕,我的意思是lower_bound,成员函数,而不是算法。

如果该集合中没有任何内容大于或等于您的搜索项目,它将返回end()。

相关问题