Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Kesetaraan `std::remove_if` untuk `std::map` dalam C ?
remove_if Equivalent for std::map
Dalam C , algoritma std::remove_if boleh mengalih keluar elemen secara berkesan daripada urutan yang memenuhi a keadaan tertentu. Walau bagaimanapun, algoritma ini tidak boleh digunakan secara langsung pada bekas bersekutu seperti std::map.
Apabila bekerja dengan peta, pendekatan yang diubah suai diperlukan. Daripada memadamkan semua elemen padanan secara membuta tuli dan tidak sah iterator, kaedah yang lebih selamat adalah dengan melelaran melalui peta dan menyemak setiap elemen terhadap keadaan.
Pertimbangkan coretan kod berikut:
std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; std::map<int, std::string>::iterator iter = aMap.begin(); std::map<int, std::string>::iterator endIter = aMap.end(); for (; iter != endIter;) { if (Some Condition) { // Safe to erase, invalidates only the current iterator iter = aMap.erase(iter); } else { ++iter; } }
Dalam pendekatan ini, kami menambah iterator hanya apabila elemen tidak memenuhi syarat. Memadamkan elemen akan membatalkan lelaran yang menunjuk kepadanya, tetapi ia tidak menjejaskan lelaran lain dalam peta. Oleh itu, adalah selamat untuk meneruskan lelaran walaupun selepas memadamkan elemen.
Dengan menggunakan algoritma yang diubah suai ini, anda boleh mengalih keluar elemen dengan selamat daripada std::map berdasarkan keadaan tersuai sambil mengekalkan integriti bekas .
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kesetaraan `std::remove_if` untuk `std::map` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!