1

与 lower_bound 不同,upper_bound 不返回迭代器到元素,如果它比较等于 value,但只有当它比较严格更大。

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

4

1 回答 1

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
于 2012-07-08T07:43:53.197 回答