C ++ STL算法upper_bound()不是严格更大的

时间:2012-07-08 07:37:36

标签: c++ binary-search upperbound

与lower_bound不同,upper_bound如果将等效值与值进行比较,则不会返回元素的迭代器,但前提是它严格比较大。

如果我想要一个大于或等于的上限算法,是否有替代方法。

1 个答案:

答案 0 :(得分:2)

您可以将迭代器减少1。

auto begin = ...;
auto end = ...;
auto it = std::upper_bound(begin, end, target);
if (it == begin)
  return it;
-- it;
if (*it < target)
  return ++it;
else
  return it;

迭代器的位置将是这样的,假设您正在搜索2:

1 1 1 2 2 2 2 3 3 3 3
      ^     ^ ^
      lb    | ub
            this function


1 1 1 1 3 3 3 3
        ^
        lb & ub & this function