Si usa el estándar C ++ 17 en MS Visual Studio 2017, tenga cuidado: la versión actual contiene un error crítico en la implementación de std :: map :: merge y std :: set :: merge. Detalles - debajo del corte.
¿Cómo se manifiesta un error?
- La complejidad de std :: map :: merge y std :: set :: merge en lugar del estándar N * log (size () + N)), donde N es el tamaño de la parte agregada, resulta ser aproximadamente N al cuadrado.
- Si se agrega un contenedor con un número suficientemente grande de elementos con la ayuda de la fusión, tras la destrucción del contenedor resultante obtenemos un desbordamiento de pila.
- El contenedor llega a un estado incorrecto después de que se ejecuta la fusión, por lo que son posibles otras manifestaciones.
¿Qué dice Microsoft?
El informe de errores lo envié a Microsoft hace casi 2 meses.
En Visual Studio 2019 Update 2, Preview 2 debería haberse solucionado.
Pero en la versión actual de Visual Studio 2017 15.9.12 no se ha solucionado hasta ahora, y a juzgar por los últimos informes, espere mucho tiempo ...
El error es la marca de color incorrecta de los nodos agregados en la implementación de red-ebony.
¿Cómo reproducir?
Variando el valor de mainSize, puede obtener diferentes resultados, ya sea solo una ejecución lenta o también bloquearse.
Que hacer
Revise su código y reemplace las llamadas de fusión con inserción manual. O actualice a VS 2019.
Y si el código compilado ya ha ido al cliente ... Ohhh ...