Si vous utilisez la norme C ++ 17 dans MS Visual Studio 2017 - soyez prudent: la version actuelle contient un bogue critique dans l'implémentation de std :: map :: merge et std :: set :: merge. Détails - sous la coupe.
Comment se manifeste un bug?
- La complexité de std :: map :: merge et std :: set :: merge au lieu du journal N * standard (size () + N)), où N est la taille de la partie ajoutée, s'avère être environ N au carré.
- Si un conteneur avec un nombre suffisamment important d'éléments a été ajouté à l'aide de la fusion, lors de la destruction du conteneur résultant, nous obtenons un débordement de pile.
- Le conteneur atteint un état incorrect après l'exécution de la fusion, de sorte que d'autres manifestations sont possibles.
Que dit Microsoft?
Le rapport de bogue a été envoyé par moi à Microsoft il y a presque 2 mois.
Dans Visual Studio 2019 Update 2 Preview 2 aurait dû être corrigé.
Mais dans la version actuelle de Visual Studio 2017, le 15.9.12 n'a pas été corrigé jusqu'à présent, et à en juger par les derniers rapports, attendez longtemps ...
Le bogue est le marquage de couleur incorrect des nœuds ajoutés dans l'implémentation de red-ebony.
Comment reproduire?
En variant la valeur de mainSize, vous pouvez obtenir des résultats différents - soit seulement une exécution lente, soit également un plantage.
Que faire
Révisez votre code et remplacez les appels de fusion par une insertion manuelle. Ou passez à VS 2019.
Et si le code compilé est déjà allé au client ... Ohhh ...