lower_bound とはどういう意味ですか。推測する必要がある場合、この関数は要求された値よりも小さい最後の要素で反復子を返すと答えます。しかし、lower_bound は upper_bound とほぼ同じであることがわかります。唯一の違いは、upper_bound の場合の厳密な不等式です。下限の通常の定義と一致する真の下限選択関数が stl にありますか。
編集:ドキュメント内の否定が多すぎて混乱しました。問題は、同じイテレータを取得したことです。lower_bound の戻り値から 1 を引いて解決しました。補間に使用します:
float operator()(double f)
{
SpectrumPoint* l=std::lower_bound(beginGet(),endGet(),(SpectrumPoint){float(f),0.0f}
,SpectrumPoint::CompareFreqLessThan);
if(l>beginGet())
{--l;}
SpectrumPoint* u=std::lower_bound(beginGet(),endGet(),(SpectrumPoint){float(f),0.0f}
,SpectrumPoint::CompareFreqLessThan);
if(u==endGet())
{u=beginGet();}
if(l==u)
{
if(u==endGet())
{return u->amp;}
return l->amp;
}
double f_min=l->freq;
double A_min=l->amp;
double f_max=u->freq;
double A_max=u->amp;
double delta_f=f_max-f_min;
double delta_A=A_max-A_min;
return A_min + delta_A*(f-f_min)/delta_f;
}
この混乱をお詫び申し上げます:-(