sort済みでない配列にlower_bound(upper_bound)をすると何が得られる?

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<ll> V = {1, 9, 1, 9, 1, 9, 1, 9};
               //    1     3     5     7 のどこかのindexがひっかかるはず。
  auto it = lower_bound(V.begin(), V.end(), 2);
  cout << it - V.begin();
}

Q. 出力は何でしょう?
a. 1かな?
b. 3かな?
c. 5かな?
d. 7かな?

ヒント

lower_boundとは?

イテレータ範囲 [first, last) のうち、指定された要素以上の値が現れる最初の位置のイテレータを取得する。

https://cpprefjp.github.io/reference/algorithm/lower_bound.html

出力

7

A. 7でした。
なんでや!1じゃないんかい!

もう少し引用

この関数の用途としては、ソート済みイテレータ範囲に対して、任意の値を二分探索で見つけるために使用できる

https://cpprefjp.github.io/reference/algorithm/lower_bound.html


lower_boundやupper_boundは前提としてsort済み配列に使用しよう。

二分探索なので、探索対象になった値がたまたま閾値未満であれば右に進むし、閾値以上なら左に進むだけ。よく考えればそう。


いいなと思ったら応援しよう!