2016-08-24 11 views
6

並べ替えられたstd::vector<int>が与えられているので、C++ 11-STD関数を使用して、要素が負から正に遷移するインデックスを探したいと思います。与えられたソートベクトルは負から正への遷移を見つける

バイナリ検索を使用してこれを実装できますが、この検索を容易にする単精度find_ifのような標準ライブラリに関数がある場合は興味があります(右のラムダ式)。

+0

のですか? – Rakete1111

+1

@ Rakete1111:find_ifは線形ですが、問題はLogN時間で解決できます –

+0

@ Armen Tsirunyanそれ以外にも、私はこのコンテキストでfind_ifを使う方法を知っています。 – user695652

答えて

14

あなたは0のlower_boundを見つける必要があります:

auto iter = std::lower_bound(vec.begin(), vec.end(), 0); 

結果イテレータはあなたが要素の順序を中断せずに0を挿入することができます最古の位置を指すようになります。同様に、upper_boundは最も右のイテレータを返します。

アルゴリズムの実行時間は `のstd :: find_if`と間違って何O(logN)

+0

華麗です! :)ありがとう – user695652

関連する問題