#c #pointers #stl #map #reference
#c #указатели #stl #Карта #ссылка
Вопрос:
Извините. тривиальный вопрос о доступе к справочной карте
если у меня есть:
map<int,string> *items= new map<int,string>();
Я это делаю?
string x = amp;items[100];
Комментарии:
1. В этом коде
items
это не ссылка, а указатель.2. Не говорите
new
. Никогда. (Если только вы не понимаете, что делаете, о чем можно судить по тому факту, что вы чувствуете себя комфортно, игнорируя этот совет.)3. Не уверен, чего вы пытаетесь достичь, но
amp;items[100]
означает — дайте мне адрес 100-й карты в динамически распределяемом массиве карт, называемых элементами. Однако, поскольку вы выделяете только одну карту (а не массив карт), это, вероятно, не то, что вы хотите.
Ответ №1:
Итак, сначала я спрашиваю: почему вы динамически распределяете свою карту? Это как бы противоречит цели его использования в первую очередь. Карта будет внутренне использовать динамическое распределение для своих элементов, но сама карта дешевая, и вы теряете возможность детерминированно управлять ее памятью через область видимости. Итак, ваш код становится:
map<int,string> my_map;
my_map[100] = "some string";
string x = items[100];
В противном случае вам нужно сначала разыменовать указатель карты.
string x = (*my_map)[100];
Хотя на самом деле … Не делай этого.
Ответ №2:
Если вы должны иметь:
map<int,string> *items= new map<int,string>();
Ты делаешь это:
string x = (*items)[100];
Если бы вы могли вместо этого:
map<int,string> items;
Вы бы сделали это:
string x = items[100];