Necesito mantener una colección de enteros en el rango de 0 a 65535 para poder hacer rápidamente lo siguiente:
- Insertar un nuevo entero
- Insertar un rango de enteros contiguos
- Eliminar un número entero
- Eliminar todos los enteros debajo de un entero
- Prueba si hay un número entero presente
Mis datos tienen la propiedad de que a menudo contienen corridas de enteros en la colección. Por ejemplo, la colección podría ser en algún momento:
{ 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 }
El enfoque más simple es usar un árbol binario equilibrado como el C ++ std :: set, sin embargo, al usar eso, no estoy aprovechando el hecho de que a menudo tengo series de números. ¿Quizás sería mejor almacenar una colección de gamas? Pero eso significa que un rango debe poder dividirse si se elimina un número entero en su medio, o unirse si se completa el espacio entre dos rangos.
¿Existen estructuras de datos existentes que sean adecuadas para este problema?
fuente