Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengalih keluar Elemen dengan Selamat dari std::map Berdasarkan Syarat?
Soalan:
Bagaimana saya boleh alih keluar elemen daripada std::map yang memenuhi syarat tertentu sambil memastikan kesahihan iterator?
Isu:
remove_if tidak boleh digunakan untuk memadamkan elemen daripada std::map. Selain itu, menggelung melalui peta dan menggunakan erase() secara langsung boleh menyebabkan iterator tidak sah.
Penyelesaian:
Algoritma alternatif yang menangani isu ini adalah seperti berikut:
for(; iter != endIter; ) { if (Some Condition) { iter = aMap.erase(iter); } else { ++iter; } }
Algoritma ini berulang melalui peta dan menyemak setiap elemen untuk keadaan yang ditentukan. Jika syarat dipenuhi, elemen dipadamkan menggunakan erase(). Iterator kemudiannya dikemas kini untuk menunjuk ke elemen sah seterusnya dalam peta. Ini memastikan bahawa iterator kekal sah walaupun selepas elemen dipadamkan.
Rasional:
Jika elemen yang ditunjuk oleh iterator pada masa ini dipadamkan, iterator adalah tidak sah. Dengan mengemas kini iterator selepas memadamkan elemen, kami melangkaui iterator yang tidak sah dan menghalang sebarang ralat masa jalan.
Nota:
Adalah penting untuk ambil perhatian bahawa hanya iterator yang merujuk elemen yang dipadamkan menjadi tidak sah. Iterator lain dalam peta kekal sah.
Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Elemen dengan Selamat dari std::map Berdasarkan Syarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!