Les algorithmes et les fonctions membres sont suggérés en boucle pour plus d'efficacité lorsque vous travaillez avec des conteneurs. Cependant, les conteneurs associatifs (unordered_map) ne fonctionnent pas avec le paradigme erase (remove_if), il semble que la méthode commune consiste à se replier sur une boucle.Une manière non-loop efficace pour effacer de unordered_map avec le prédicat C++ 11?
UOM est un std :: unordered_map
for(auto it = uom.begin() ; it!=uom.end();){
if(it->second->toErase()) {
delete it->second; // omit delete if using std::unique_ptr
fpc.erase(it++);
}else{
++it;
}
}
// comme par Scott Meyers efficace STL PG45
est ce aussi efficace que possible? Il semble qu'il devrait y avoir un meilleur moyen d'utiliser le paradigme erase (remove_if) mais cela fonctionne pour unordered_map (je comprends que les conteneurs associatifs ne peuvent pas être "réordonnés" d'où le non-support de l'algorithme remove_if) . Est-ce vraiment le meilleur moyen d'effacer des entrées d'unordered_map en utilisant un prédicat? Aucune suggestion?
Merci d'avance.