Je peut facilement effectuer une itération sur les valeurs d'une carte à l'aide d'une gamme à base de boucle?
Est-il possible d'itérer sur toutes les valeurs dans un std::map en utilisant simplement un foreach?
C'est mon code actuel:
std::map<float, MyClass*> foo ;
for (map<float, MyClass*>::iterator i = foo.begin() ; i != foo.end() ; i ++ ) {
MyClass *j = i->second ;
j->bar() ;
}
Est-il un moyen pour que je puisse faire cela?
for (MyClass* i : /*magic here?*/) {
i->bar() ;
}
- Pourquoi vous n'aimez pas je->second->bar() ?
- Jetez un oeil à [cette question, la réponse de l'][1]. Je pense que est exactement ce dont vous avez besoin. [1]: stackoverflow.com/questions/6963894/...
- Non, que l'on demande seulement comment itérer sur une carte, en général, pour les de gamme pour les. Celui-ci lui demande comment itérer plus précisément, uniquement sur les valeurs.
- Ahh, je vois. J'ai oublié que.
Vous devez vous connecter pour publier un commentaire.
La magie réside avec Coup de pouce.Gamme de
map_values
adaptateur:Et c'est officiellement appelée "gamme à base de boucle", pas une "boucle foreach". 🙂
auto const&&
.auto const &&i
🙂or
, droit?auto const i
operator|
de faire le chaînage de plus facile:map | map_values | filtered(pred) | transformed(blub) | reversed
. 🙂auto const&&
seulement de se lier aux références rvalue plus précisément, alors queauto&&
est "universelle" de référence (peut se lier à des lvalues ainsi)?en c++11 (également connu sous le nom c++0x), vous pouvez le faire comme en C# et Java
MyClass *j = any.second ;
😛De C++1z/17, vous pouvez utiliser structuré liaisons:
[[maybe_unused]]
attribut. Voir ici stackoverflow.com/q/41404001/580083