假设我有一组值,存储在一个std ::集:使用STL map/set/multiset/multimap,如何找到大于或等于搜索关键字的第一个值?
{1,2,6,8}
,我有一个搜索关键字,比如说,3。我希望把3变成一个函数,并得到第一个值大于或等于3,在这种情况下,我想得到6.
当然,map/set/multimap /中提供的find()返回这种情况下的结束迭代器。有没有类似的功能找到在这种情况下会返回6?
假设我有一组值,存储在一个std ::集:使用STL map/set/multiset/multimap,如何找到大于或等于搜索关键字的第一个值?
{1,2,6,8}
,我有一个搜索关键字,比如说,3。我希望把3变成一个函数,并得到第一个值大于或等于3,在这种情况下,我想得到6.
当然,map/set/multimap /中提供的find()返回这种情况下的结束迭代器。有没有类似的功能找到在这种情况下会返回6?
是:upper_bound(X)
返回指向大于X
的第一个元素的迭代器。还有一个lower_bound(X)
函数,它返回一个迭代器,指向不小于X
的第一个元素。因此,半开区间[lower_bound(X), upper_bound(X))
中的所有元素将等于X.
你想要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.
不等于X,但等效。例如,在不区分大小写的集合中,“ABC”的lower_bound可以是“abc”。 对于std :: set,“半开区间内的所有元素”最多只有1个元素。 –
MSalters
2008-10-07 12:07:51