假设我有一组值,存储在 std::set 中:
{1、2、6、8}
我有一个搜索键,比如 3。我想将 3 放入一个函数并获得大于或等于 3 的第一个值,在这种情况下,我想获得 6。
map/set/multimap/and set 中提供的 find() 函数当然会返回这种情况的结束迭代器。在这种情况下,是否有类似的函数可以返回 6?
假设我有一组值,存储在 std::set 中:
{1、2、6、8}
我有一个搜索键,比如 3。我想将 3 放入一个函数并获得大于或等于 3 的第一个值,在这种情况下,我想获得 6。
map/set/multimap/and set 中提供的 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.