与lower_bound不同,upper_bound如果将等效值与值进行比较,则不会返回元素的迭代器,但前提是它严格比较大。
如果我想要一个大于或等于的上限算法,是否有替代方法。
答案 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