¿Razonamiento para std :: lower_bound y std :: upper_bound?

STL proporciona funciones de búsqueda binarias std :: lower_bound y std :: upper_bound, pero tiendo a no usarlas porque no he podido recordar lo que hacen, porque sus contratos me parecen completamente desconcertantes.

Solo por mirar los nombres, supongo que "lower_bound" podría ser la abreviatura de "last lowerbound",
es decir, el último elemento en la lista ordenada que es <= el valor dado (si lo hay).
Y de manera similar, supongo que "upper_bound" podría ser la abreviatura de "first upperbound",
es decir, el primer elemento en la lista ordenada que es> = el valor dado (si lo hay).

Pero la documentación dice que hacen algo bastante diferente de eso, algo que parece ser una mezcla de al revés y aleatorio, para mí. Parafraseando el documento:
- lower_bound encuentra el primer elemento que es> = val
- upper_bound encuentra el primer elemento que es> val

Entonces lower_bound no encuentra un límite inferior en absoluto; encuentra el primeroSuperior ¿¡ligado!? Y upper_bound encuentra el primerosuperior estricto ligado.

¿¿Tiene esto algún sentido?? Como lo recuerdas

Respuestas a la pregunta(10)

Su respuesta a la pregunta