lower_boundとは異なり、upper_boundは、値と同等に比較する場合は要素にイテレータを返しませんが、厳密に大きく比較する場合に限ります。
以上のupper_boundアルゴリズムが必要な場合の代替手段はありますか?
lower_boundとは異なり、upper_boundは、値と同等に比較する場合は要素にイテレータを返しませんが、厳密に大きく比較する場合に限ります。
以上のupper_boundアルゴリズムが必要な場合の代替手段はありますか?
イテレータを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