Preciso manter uma coleção de números inteiros no intervalo de 0 a 65535 para que eu possa fazer o seguinte rapidamente:
- Inserir um novo número inteiro
- Inserir um intervalo de números inteiros contíguos
- Remover um número inteiro
- Remova todos os números inteiros abaixo de um número inteiro
- Teste se um número inteiro está presente
Meus dados têm a propriedade que geralmente contém execuções de números inteiros na coleção. Por exemplo, em algum momento, a coleção pode ser:
{ 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 }
A abordagem mais simples é apenas usar uma árvore binária balanceada como o C ++ std :: set; no entanto, usando isso, não estou aproveitando o fato de que muitas vezes tenho números. Talvez seja melhor armazenar uma coleção de intervalos? Mas isso significa que um intervalo precisa poder ser dividido se um número inteiro no meio for removido ou unido se o espaço entre dois intervalos for preenchido.
Existe alguma estrutura de dados existente que seria adequada para esse problema?
fonte