2009-08-06 6 views

Répondre

57

Vous pouvez le faire:

(*myFruit)["apple"] = 1; 

ou

myFruit->operator[]("apple") = 1; 

ou

map<string, int> &tFruit = *myFruit; 
tFruit["apple"] = 1; 
+0

N'oubliez pas d'allouer l'objet carte avec le nouveau en premier. – Matt

+0

Mes réponses supposent que 'myFruit' est un pointeur déjà existant vers un' map 'quelque part, qui peut ou non avoir été alloué sur le tas. –

+3

Selon que vous voulez une sémantique supplémentaire, C++ 11 offre une fonction at() vérifiée que vous pouvez utiliser comme 'ptr-> at (" apple ")' – PlasmaHH

5

myFruit est un pointeur vers une carte. Si vous supprimez l'astérisque, vous aurez une carte et votre syntaxe suivra.

Vous pouvez également utiliser l'opérateur de déréférencement (*) pour accéder à la carte à l'aide du pointeur, mais vous devrez créer votre carte d'abord:

map<string, int>* myFruit = new map<string, int>() ; 
+0

Ce manque un peu le point. Il sait déjà qu'il ne peut pas accéder aux éléments, mais il a un pointeur, et il est déjà alloué. – GManNickG

+0

Je relis la question et je ne vois aucune mention que la carte est déjà allouée - ou est-ce que j'ai manqué ça? – swongu

2
map<string, int> *myFruit; 
(*myFruit)["apple"] = 1; 
(*myFruit)["pear"] = 2; 

fonctionnerait si vous avez besoin Gardez-le comme un pointeur.

Questions connexes