Estoy haciendo muchas inserciones de std::pair<int, int>
en un std::set
, y me está tomando más tiempo de lo que quisiera. Cuando escribí el código, me figuré que usaría el formulario itector de sugerencia de insertar más adelante si resultara ser un cuello de botella; bueno, ahora está perfilado y es es un cuello de botella. Entonces quiero usar la sugerencia del iterador.std :: set :: insert, ¿qué tan mal puedo insinuar?
Sin embargo, no siempre sabré una buena posición para insertar mis pares. Normalmente los inserto en lotes (un lote en este caso es del orden del 0.01% del tamaño de entrada total, duplicados incluidos) de orden creciente, pero cuando se inserta un lote, no sé dónde debería estar el siguiente comienzo. ¿Cómo se usa la pista? ¿La inserción hace algo así como una búsqueda binaria desde la posición sugerida? ¿Qué tan malo sería usar una mala pista, por lo general?
¿Más de lo que me gustaría? Sé 'O (n)', 'O (log n)', incluso 'O (n^2)' ... Pero 'O (más de lo que me gustaría)' no está en mi libro de texto – sehe
Bueno, las cosas raramente toman 'O (log n)' segundos tampoco ... Pero hacer ~ 200,000 inserciones (con duplicados) toma aproximadamente 4 segundos.Es un retraso notable para el usuario, y me gustaría acortarlo si puedo – carlpett
Si se trata de un cuello de botella, podría comparar con 'unordered_set'. Boost o STL dependiendo de tu compilador. –