Acabo de crear una función de búsqueda personalizada para cadenas en un mapa. Desarrollé algún tipo de algoritmo de búsqueda lineal (que descubrí más tarde) y no estaba satisfecho con la velocidad de la función. Así que busqué una función más rápida y encontré la función propia del mapa: map :: find.¿Qué algoritmo está detrás del descubrimiento de STL?
Esto fue increíblemente más rápido que el algoritmo lineal que estaba usando.
En otro ejemplo, la función de STL find también fue mucho más rápido que otra función lineal que estoy usando.
Pero, ¿cómo es esto posible? Si usa el algoritmo de búsqueda binaria, primero debe ordenar el mapa, lo que tomaría (hipotéticamente) más tiempo cuanto más grande sea su mapa.
¿También cómo saber los algoritmos detrás de esas funciones básicas? ¿Hay una lista o algún tipo de base de datos para encontrar esto?
¡Gracias por todas sus respuestas! Subí las mejores respuestas y acepté la respuesta de Max Lybbert porque era la más detallada.
Paul :)
No vale la pena una respuesta, pero 'find' de gcc utiliza un bucle' while 'regular para los iteradores de entrada (es decir, 'istream') y los iteradores de ida/bidireccionales (es decir' lista'). Para los iteradores de acceso aleatorio (es decir, 'vector'), utiliza un bucle' for', pero comprueba cuatro elementos a la vez. La implementación de Visual Studio es solo un bucle 'for' regular que comprueba un elemento a la vez, pero está especializado para buscar cadenas. –
Encontré [estos] (http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Introduction-to-STL-with-Stephan-T-Lavavej/) videos introductorios en channel9 para ser realmente útiles también al comenzar con STL – MarkB42