1

lower_boundとは異なり、upper_boundは、値と同等に比較する場合は要素にイテレータを返しませんが、厳密に大きく比較する場合に限ります。

以上のupper_boundアルゴリズムが必要な場合の代替手段はありますか?

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 に答える