Jika Anda menggunakan standar C ++ 17 di MS Visual Studio 2017 - hati-hati: versi saat ini berisi bug penting dalam implementasi std :: map :: merge dan std :: set :: merge. Detail - di bawah potongan.
Bagaimana bug bermanifestasi?
- Kompleksitas std :: map :: merge dan std :: set :: merge alih-alih standar N * log (size () + N)), di mana N adalah ukuran dari bagian yang ditambahkan, ternyata sekitar N kuadrat.
- Jika sebuah wadah dengan jumlah elemen yang cukup besar ditambahkan dengan bantuan penggabungan, setelah penghancuran dari wadah yang dihasilkan, kita mendapatkan stack overflow.
- Wadah datang ke kondisi yang salah setelah penggabungan berjalan, sehingga manifestasi lain dimungkinkan.
Apa yang dikatakan Microsoft?
Laporan bug dikirim oleh saya ke Microsoft hampir 2 bulan yang lalu.
Dalam Visual Studio 2019 Pembaruan 2 Pratinjau 2 seharusnya diperbaiki.
Tetapi dalam versi Visual Studio 2017 15.9.12 saat ini belum diperbaiki sejauh ini, dan menilai dari laporan terbaru, tunggu lama ...
Bug adalah tanda warna yang salah dari node yang ditambahkan dalam implementasi red-ebony.
Bagaimana cara mereproduksi?
Memvariasikan nilai mainSize, Anda bisa mendapatkan hasil yang berbeda - baik eksekusi lambat, atau crash.
Apa yang harus dilakukan
Merevisi kode Anda dan mengganti panggilan gabung dengan penyisipan manual. Atau tingkatkan ke VS 2019.
Dan jika kode yang dikompilasi sudah ke pelanggan ... Ohhh ...