与えられた:
typedef .../*some type*/ SomeValue;
SomeValue someFunction(int arg){
return /*some calculation involving arg that produces SomeValue*/
}
int firstCandidate = 0, lastCandidate = 101;
SomeValue desiredValue = SomeValue();
二分探索 ( ) を使用して ( に渡されたときに) をint
生成する引数を見つけたいです。
、に与えるパラメータです。検索候補の場合、を呼び出して結果を と比較する必要があります。は真です。desiredValue
someFunction
std::lower_bound
firstCandidate
lastCandidate
someFunction
std::lower_bound
someFunction(currentArgument)
desiredValue
SomeValue
someFunction(x) < someFunction(x + 1)
つまり、これと同じ結果が得られるはずです:
int findArgLowerbound(int first, int last, SomeValue refVal){
for (int i = first; i < last; i++){
if (someFunction(i) >= refVal)
return i;
}
return last;
}
標準関数 + 二分探索アルゴリズムのみを使用します。
ブーストの有無にかかわらず、(独自のバイナリ検索関数を作成せずに)
簡単に行うにはどうすればよいですか? int
はイテレータではなくboost::make_transform_iterator
、この場合の作成方法がわかりません。
制限:
- c++03 標準。
- ブーストは問題ありませんが、ブーストなしのソリューション が本当に好きです。
- 編集 -
組み込み関数または既に利用可能な関数 (std::lower_bound など) を使用して、自分のやりたいことを実行する方法を知りたいです。特殊な二分探索関数を書くことはできますが、それが「正しい」方法だとは思いません。