Bartosz がリンクした機能に関するメモ:
upper_bound(begin, end, value)
指定された値より大きい最初の要素を返します。これは、それを挿入して順序を維持できる間隔の終わり(または終わりの 1 つ後) です。
lower_bound(begin, end, value)
指定された値以上の最初の要素を返します。これは、挿入できる間隔の始まりです
したがって、実際には:
std::vector<int> v = {1, 4, 7, 12, 17, 55};
int x = 8;
auto first = std::lower_bound(v.begin(), v.end(), x);
auto last = std::upper_bound(first, v.end(), x);
与えるべきfirst == last && *first == 12
です。これは挿入できた半開区間[first,last)
が空いているためです。x
これは通常、実際に要求したものよりも便利であることに注意してください。
std::vector::insert(iterator, value)
指定された反復子の前に挿入するため、upper_bound
ここの結果をいつでも使用できます。