C — Ссылка на карту доступа

#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];