La déclaration de l’opérateur [] sur un std::map est la suivante :
Y a-t-il une raison que ce n’est pas cela ?
Parce que ce serait extrêmement utile n’importe quel moment vous devez accéder à une carte de membre dans une méthode const.
La déclaration de l’opérateur [] sur un std::map est la suivante :
Y a-t-il une raison que ce n’est pas cela ?
Parce que ce serait extrêmement utile n’importe quel moment vous devez accéder à une carte de membre dans une méthode const.
operator[]
dans une carte retourne la valeur de la clé spécifiée ou crée une nouvelle valeur initialisée élément clé si ce n'est pas déjà présent, de sorte qu'il serait impossible.
Si operator[]
aurait un const
de surcharge, l'ajout de l'élément ne fonctionne pas.
Qui répond à la question. Alternatives:
Pour C++03 - vous pouvez utiliser des itérateurs (ce sont des const
et non-const
couplé avec find
). En C++11 , vous pouvez utiliser l' at
méthode.
Ces réponses sont correctes dans cette operator[]
a la sémantique pour ajouter une clé si elle n'existe pas, mais je voudrais ajouter un autre point de vue:
Remarquez comment operator[]
renvoie un T&
. C'est, il renvoie une référence à l' value
qui est associé avec key
. Mais que faire si il n'y a pas d' key
dans la map
? Ce qui devrait nous revenir? Il n'y a pas une telle chose comme un "null " référence" et de lancer une exception serait ennuyeux.
Ce serait une bonne raison pour ne operator[] const
. Que voulez-vous retourner à l'utilisateur si vous ne pouvez pas ajouter quoi que ce soit à l' map
(car l'opérateur est - const
), mais ils sont à la recherche d'un élément qui n'existe pas? Une bonne solution à ce problème est de ne pas avoir l' operator[] const
.
La (non-const
) operator[]
crée la clé si elle n'existe pas.
L' const
version de cet opérateur, si elle existait, devrait avoir des sémantiques différentes, car il ne serait pas en mesure d'ajouter une nouvelle clé.
Je suis sûr que vous seriez d'accord que la const
et non-const
surcharges avec significativement différente de la sémantique serait une boîte de pandore. Donc pas d' const
version est fournie.
Il y a un const find()
membre de bien que, de sorte que vous pouvez l'utiliser dans votre code.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.