¿Es necesario que el vector se ordene para usar lower_bound?

lower_bound() devuelve un iterador a los elementos en el rango dado que no compara menos que el valor dado. El rango dado ya debería estar ordenado para que lower_bound () funcione correctamente . En otras palabras, devuelve un iterador al límite inferior del elemento dado en el rango ordenado dado.

Incluso para upper_bound() , el vector debe estar ordenado.

#include
#include
#include
usando el espacio de nombres estándar;

int main () {

int input [] = {1,2,2,3,4,4,5,6,7,8,10,45};

vector v (entrada, entrada + 12);
vector :: iterador it1, it2;

it1 = lower_bound (v.begin (), v.end (), 4);
/ * apunta al quinto elemento en v * /

it2 = lower_bound (v.begin (), v.end (), 10);
/ * apunta al segundo último elemento en v * /
}

Aunque para la mayoría de los propósitos prácticos, desea que se ordene, el requisito real, como debe decir cualquier referencia (¿cuál miró?), Es que la secuencia está dividida por el valor que está buscando: elementos más pequeños que ese valor puede aparecer en cualquier orden siempre y cuando todos aparezcan antes del valor, los elementos más grandes pueden aparecer en cualquier orden siempre que todos aparezcan después …

Una secuencia ordenada se divide en particiones alrededor de cada valor, lo que hace que sea conveniente usar lower_bound y otras búsquedas binarias, pero no es un requisito.

Referencia: std :: lower_bound – cppreference.com

lower_bound () es una versión de búsqueda binaria.

La búsqueda binaria requiere que se ordene la matriz.

Entonces, para lower_bound () para que funcione correctamente, el vector tiene que ser ordenado.