おそらく私はlower bound
の技術的定義を誤解していますが、a = { 0, 3, 4 }
というセットがあり、その結果が0
であると計算されたa.lower_bound(2)
と予想されます。私。私はstd::set::lower_bound
がinfimumなぜstd :: set :: lower_bound(x)(実質的に)は、最大の数値<= xではなく、最小の数> = xと定義されていますか?
の数学的概念に近いことが期待されるそして、まだ標準ライブラリは、(効果的>=
)xよりも小さくない最大の数として定義されます。
これにはどのような理由がありますか?
をおそらくそう、イテレータの範囲の観点から考えることがより一般的ですイテレーターの戻り値は、「私は2と5の間のすべてが欲しい」と言うとき、より低い「障壁」です。しかし、なぜそれがそうでなければそれを期待するのでしょうか?あなたの背後にある/あなたの/推論とは何ですか? – PlasmaHH
優れた答えに加えて、 '* iter!= x'の場合は' std :: prev(iter) 'を使って最小値を得ることができます。 –
訂正 - "...標準ライブラリは**最小の**数値以上であると定義しています" @ KonradRudolphの提案は良いですが、まずは 'set'が空でないことを確認する必要があります。'std :: lower_bound'フリー関数については、' reverse_iterator'と 'std :: greater'を使って" error "の方向を逆にすることもできます。 – Potatoswatter