二分探索を使用する関数はありますが、特定の述語に従って最後の項目以下lower_bound
を返しますか?
lower_bound
は次のように定義されています。
順序付けられた範囲内で、指定された値以上の値を持つ最初の要素の位置を検索します。順序付け基準はバイナリ述語で指定できます。
とupper_bound
:
順序付けられた範囲内で、指定された値より大きい値を持つ最初の要素の位置を検索します。順序付け基準はバイナリ述語で指定できます。
具体的には、時間順のイベントのコンテナーがあり、特定の時間について、その時点またはその前に発生した最後のアイテムを見つけたいと考えています。上限/下限、逆反復子、および or を使用してこれを実現できますstd::greater
かstd::greater_equal
?
編集:配列の開始前にポイントを要求する場合に対処するために、user763305 の提案に微調整が必要でした:
iterator it=upper_bound(begin(), end(), val, LessThanFunction());
if (it!=begin()) {
it--; // not at end of array so rewind to previous item
} else {
it=end(); // no items before this point, so return end()
}
return it;