Belirli bir duruma göre haritadan bir dizi öğeyi silmeye çalışıyordum. STL algoritmalarını kullanarak bunu nasıl yaparım?
Başlangıçta kullanmayı düşündüm remove_if
ama bu mümkün değil, çünkü remove_if ilişkisel kapsayıcı için çalışmıyor.
Harita için çalışan herhangi bir "remove_if" eşdeğeri algoritması var mı?
Basit bir seçenek olarak, haritayı dolaşıp silmeyi düşündüm. Ancak haritada döngü yapmak ve güvenli bir seçeneği silmek mi? (Silindikten sonra yineleyiciler geçersiz hale geldikçe)
Aşağıdaki örneği kullandım:
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(); ){ ....}
dağınıklığı azaltmak için kullanabilirsiniz . Diğerlerinin söylediği gibi dinlenme. Bu soru az önce saçlarımı kırmaktan kurtardı ;-)