¿Por qué las funciones de límite superior e inferior en C ++ STL dan diferentes índices para el mismo número?

Ambas funciones realizan una búsqueda binaria, ambas funciones requieren una secuencia ordenada (técnicamente el requisito es mucho más débil, pero puede leer la documentación para eso), pero hacen cosas diferentes:

std :: puntos lower_bound en la primera posición en el rango igual

std :: upper_bound apunta uno más allá del final del rango igual.

std :: equal_range devuelve los resultados de lower_bound y upper_bound

Para tomar su ejemplo, {1,2,2,3,4,4,5,7,8,10,45}, el rango igual ocupado por el valor 2 consta de dos elementos: elemento en el índice 1 (igual a 2 ) y elemento en el índice 2 (también igual a 2). El límite inferior es el índice 1, el límite superior es el índice 3:

L (2)
El |
1,2,2,3,4,4,5,7,8,10,45
El |
U (2)

el rango igual ocupado por el valor 1 consiste en un único elemento en el índice 0: el enlace inferior es el índice 0, el límite superior es el índice 1

L (1)
El |
1,2,2,3,4,4,5,7,8,10,45
El |
U (1)

el rango igual ocupado por el valor 6 estaría entre el índice 7 (donde se encuentra el valor 5) y el índice 8 (donde se encuentra el valor 7), en este caso lower_bound y upper_bound devuelven el mismo iterador apuntando a la siguiente posición:

L (6)
El |
1,2,2,3,4,4,5,7,8,10,45
El |
U (6)

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

int main ()
{
int input [] = {1,2,2,3,4,4,5,7,8,10,45};
vector v (entrada, entrada + 11);

vector :: iterador it1, it2;

it1 = lower_bound (v.begin (), v.end (), 10);
cout << it1-v.begin ();
/ * apunta a ocho elementos en v * /

it2 = upper_bound (v.begin (), v.end (), 7);
cout << endl << it2-v.begin ();
/ * apunta al séptimo
elemento en v * /
} // aquí está el código

// la salida es 9, 8

More Interesting

¿Cómo puedo cambiar el tamaño de una imagen a un ancho y alto específicos sin dejar de mantener su relación de aspecto? Estoy buscando ideas de algoritmos.

¿Cómo determina el algoritmo de alimentación de Quora el contenido a mostrar?

¿Hay alguna estructura de datos que no se pueda representar dentro de una computadora?

Un hombre llega a su oficina en 2 horas y regresa en 3 horas. La ruta a su oficina incluye un sendero inclinado hacia arriba, 8 km y senderos inclinados hacia abajo. Cada vez que viaja hacia arriba, su velocidad es de 60 km / h, mientras que en un plano de 80 km / h, y cubre hacia abajo a una velocidad de 100 km / h. ¿A qué distancia está su oficina?

Quicksort: ¿Cuál es el algoritmo de ordenación rápida?

Para aprender la codificación, ¿primero se debe aprender un lenguaje o algoritmos?

Si dos cadenas de longitud desigual se generan por el mismo patrón, ¿cómo se relacionan sus complejidades de Kolmogorov?

¿Cuándo se usaría un algoritmo gráfico?

¿Hay alguna aplicación que use el montón de izquierda? ¿Cuál es el uso real de los montones en las estructuras de datos?

¿Qué tiene más sentido estudiar como programador después de aprender algoritmos básicos?

¿Cuáles son los 10 algoritmos que uno debe conocer para resolver la mayoría de los problemas de algoritmos?

¿Cuál es el curso / certificación mejor pagado disponible para estructuras de datos y algoritmo?

¿Un cerebro humano tiene un algoritmo? Si se descifran los algoritmos del cerebro humano, ¿qué sucede? ¿Se usa en inteligencia artificial?

¿Qué es una explicación intuitiva de la complejidad del tiempo de ejecución del algoritmo?

¿Cómo se pueden realizar los pagos mediante algoritmos informáticos?