2009-08-06 19 views

Odpowiedz

57

Można to zrobić:

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

lub

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

lub

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

Nie zapomnij przydzielić obiektu mapy najpierw nowym. – Matt

+0

Moje odpowiedzi zakładają, że 'myFruit' jest już istniejącym wskaźnikiem do' mapy 'gdzieś, która może ale nie musi być przydzielona na stercie. –

+3

Zależnie od tego, czy chcesz tej dodatkowej semantyki, C++ 11 oferuje funkcję checked at(), której możesz użyć jako 'ptr-> at (" apple ")' – PlasmaHH

5

myFruit to wskaźnik do mapy. Jeśli usuniesz gwiazdkę, będziesz mieć mapę i działa następująca składnia.

Alternatywnie, można użyć operatora wyłuskania (*), aby uzyskać dostęp do mapy za pomocą wskaźnika, ale musisz najpierw stworzyć swoją mapę:

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

to trochę mija się z celem. Wie już, że nie może uzyskać dostępu do elementów, ale ma wskaźnik i jest już przydzielony. – GManNickG

+0

Ponownie przeczytałem pytanie i nie widzę wzmianki, że mapa jest już przydzielona - czy też tęskniłem za tym? – swongu

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

będzie działać, jeśli trzeba zachowaj to jako wskaźnik.

Powiązane problemy