Tal vez estoy malinterpretando la definición técnica de lower bound
, pero esperaría que si tuviera un conjunto a = { 0, 3, 4 }
y calculé el a.lower_bound(2)
que el resultado sería 0
. Es decir. Yo esperaría std::set::lower_bound
a estar cerca del concepto matemático de infimum¿Por qué std :: set :: lower_bound (x) (efectivamente) se define como el número más pequeño> = x en lugar del número más grande <= x?
Y sin embargo, la biblioteca estándar define como el número más grande de no menos de (>=
efectiva) x.
¿Cuál es el razonamiento detrás de esto?
Probablemente es más común que se piense en términos de rangos de iteradores, por lo el retorno del iterador es la "barrera" inferior de cuando dices "Quiero todo entre 2 y 5". La pregunta es, ¿por qué esperarías que fuera de otra manera? ¿Cuál es/tu/razonamiento detrás de esto? – PlasmaHH
Además de la excelente respuesta, puede obtener el infimo usando 'std :: prev (iter)' if '* iter! = X'. –
Correcciones - "... la biblioteca estándar lo define como el número ** más pequeño ** no menos de ..." @ La sugerencia de KonradRudolph es buena, pero primero también debe verificar que el 'conjunto' no esté vacío.Para la función gratuita 'std :: lower_bound', también puede usar' reverse_iterator's y 'std :: greater' para invertir la dirección de" error ". – Potatoswatter