GNT sans publicité, site mobile, fonctionnalitées exclusives...

std::map::operator[] const

Le
Mickaël Wolff
Bonjour,

J'ai cherché des justifications au fait que cette surcharge n'existe
pas. Et je n'en ai pas trouvé, hormis le fait que l'inexistance de la
clé entraîne l'ajout d'une paire dans la map.

Pourquoi ?
Existe-t-il une méthode élégante pour contourner ce manque ?
Peut-être que je me trompe dans mon interprétation de ce qu'est une
map, et que donc je n'utilises pas le bon outil ?

Merci :)
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Lire les 16 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal Bourguignon
Le #5707141
Mickaël Wolff
Bonjour,

J'ai cherché des justifications au fait que cette surcharge n'existe
pas. Et je n'en ai pas trouvé, hormis le fait que l'inexistance de la
clé entraîne l'ajout d'une paire dans la map.

Pourquoi ?


Parce que l'inexistance de la clé entraîne l'ajout d'une paire dans
la map.


Existe-t-il une méthode élégante pour contourner ce manque ?


Tu peux utiliser map::find.


Peut-être que je me trompe dans mon interprétation de ce qu'est une
map, et que donc je n'utilises pas le bon outil ?


Je ne sais pas, c'est quoi pour toi une map?


--
__Pascal Bourguignon__ http://www.informatimago.com/

Pour moi, la grande question n'a jamais été: «Qui suis-je? Où vais-je?»
comme l'a formulé si adroitement notre ami Pascal, mais plutôt:
«Comment vais-je m'en tirer?» -- Jean Yanne

Gabriel Dos Reis
Le #5868001
Mickaël Wolff
| Bonjour,
|
| J'ai cherché des justifications au fait que cette surcharge n'existe
| pas. Et je n'en ai pas trouvé, hormis le fait que l'inexistance de la
| clé entraîne l'ajout d'une paire dans la map.
|
| Pourquoi ?

operator[] est défini en terme de recherche+insertion.

-- Gaby
vecchio56
Le #5775611
Si on ne veut pas que l'inexistence entraine l'ajout de la clé, qu'est
ce qui sera retourné si on fait un accès et que la clé demandée n'est
pas présente? Ce n'est pas possible.
Du coup, l'ajout est obligatoire, et on ne peut pas fournir d'opérateur
en const
Bonjour,

J'ai cherché des justifications au fait que cette surcharge n'existe
pas. Et je n'en ai pas trouvé, hormis le fait que l'inexistance de la
clé entraîne l'ajout d'une paire dans la map.

Pourquoi ?
Existe-t-il une méthode élégante pour contourner ce manque ?
Peut-être que je me trompe dans mon interprétation de ce qu'est une
map, et que donc je n'utilises pas le bon outil ?

Merci :)



Mickaël Wolff
Le #5800221

Parce que l'inexistance de la clé entraîne l'ajout d'une paire dans
la map.


Certes, mais pourquoi ajouter une paire ? Pourquoi ne pas lancer une
exception ?

Existe-t-il une méthode élégante pour contourner ce manque ?


Tu peux utiliser map::find.


Non, j'ai essayé. il n'y a pas de map::find const

Je ne sais pas, c'est quoi pour toi une map?


Je le prenais comme un tableau associatif, qui renvoie une valeur pour
une clé associée à une valeur

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org


Fabien LE LEZ
Le #5800211
On Mon, 21 Apr 2008 02:53:09 +0200, Mickaël Wolff :

Certes, mais pourquoi ajouter une paire ? Pourquoi ne pas lancer une
exception ?


L'opérateur non-const [] ajoute une paire si nécessaire, pour qu'on
puisse écrire :

map<int,int> m;
m[3]= 5;

Une conséquence immédiate (et peut-être malheureuse) est que le code
ci-dessous ajoute également une paire dans le map<> :

map<int,int> m;
cout << m[4];

En C++, le mot-clé "const" sert avant tout à avoir un message d'erreur
(à la compilation) si on modifie un élément qui, logiquement, n'a pas
à être modifié. En particulier, l'ajout ou le retrait d'un "const"
(tout comme de "public"/"private") ne devrait pas changer sensiblement
le comportement du programme.

Ainsi, si j'écris

map<int,int> m const;
cout << m[4];

j'ai une erreur à la compilation. C'est logique, map::operator[] n'a
pas été prévu pour être utilisé comme ça.
Si, par l'ajout du "const", le comportement du programme avait été
silencieusement modifié, avec à la clé une exception lancée de temps
en temps, ce serait un cauchemar pour le programmeur.

Publicité
Suivre les réponses
Poster une réponse
Anonyme