Saya mencoba menghapus berbagai elemen dari peta berdasarkan kondisi tertentu. Bagaimana cara melakukannya menggunakan algoritma STL?
Awalnya saya berpikir untuk menggunakan remove_if
tetapi tidak mungkin karena remove_if tidak berfungsi untuk wadah asosiatif.
Apakah ada algoritme setara "remove_if" yang berfungsi untuk peta?
Sebagai opsi sederhana, saya berpikir untuk mengulang melalui peta dan menghapus. Tetapi apakah perulangan melalui peta dan menghapus opsi yang aman? (Karena iterator menjadi tidak valid setelah dihapus)
Saya menggunakan contoh berikut:
bool predicate(const std::pair<int,std::string>& x)
{
return x.first > 2;
}
int main(void)
{
std::map<int, std::string> aMap;
aMap[2] = "two";
aMap[3] = "three";
aMap[4] = "four";
aMap[5] = "five";
aMap[6] = "six";
// does not work, an error
// std::remove_if(aMap.begin(), aMap.end(), predicate);
std::map<int, std::string>::iterator iter = aMap.begin();
std::map<int, std::string>::iterator endIter = aMap.end();
for(; iter != endIter; ++iter)
{
if(Some Condition)
{
// is it safe ?
aMap.erase(iter++);
}
}
return 0;
}
for(auto iter=aMap.begin(); iter!=aMap.end(); ){ ....}
untuk mengurangi kekacauan. Istirahat seperti yang dikatakan orang lain. Pertanyaan ini menyelamatkan saya dari beberapa masalah sekarang ;-)