並べ替えられたstd::vector<int>
が与えられているので、C++ 11-STD関数を使用して、要素が負から正に遷移するインデックスを探したいと思います。与えられたソートベクトルは負から正への遷移を見つける
バイナリ検索を使用してこれを実装できますが、この検索を容易にする単精度find_if
のような標準ライブラリに関数がある場合は興味があります(右のラムダ式)。
並べ替えられたstd::vector<int>
が与えられているので、C++ 11-STD関数を使用して、要素が負から正に遷移するインデックスを探したいと思います。与えられたソートベクトルは負から正への遷移を見つける
バイナリ検索を使用してこれを実装できますが、この検索を容易にする単精度find_if
のような標準ライブラリに関数がある場合は興味があります(右のラムダ式)。
あなたは0のlower_boundを見つける必要があります:
auto iter = std::lower_bound(vec.begin(), vec.end(), 0);
結果イテレータはあなたが要素の順序を中断せずに0を挿入することができます最古の位置を指すようになります。同様に、upper_bound
は最も右のイテレータを返します。
アルゴリズムの実行時間は `のstd :: find_if`と間違って何O(logN)
華麗です! :)ありがとう – user695652
のですか? – Rakete1111
@ Rakete1111:find_ifは線形ですが、問題はLogN時間で解決できます –
@ Armen Tsirunyanそれ以外にも、私はこのコンテキストでfind_ifを使う方法を知っています。 – user695652