Как вставить в `std :: map* myMap`? - PullRequest
2 голосов
/ 05 мая 2019

Я инициализировал карту следующим образом:

map<string, double>* myMap = new map<string, double>();

это объявление не может быть изменено!

Я пытался вставить в него как:

myMap["hi"] = 20.0;

и

myMap->insert ("hi", 20.0);

Какой правильный путь?

1 Ответ

2 голосов
/ 05 мая 2019

myMap - указатель в вашем случае.Почему вы выделяете карту с new?Сделайте это так:

map<string, double> myMap;
myMap["hi"] = 20.0;

Или, если вы все еще хотите выделить его динамически, разыменуйте указатель

(*myMap)["hi"] = 20.0;

или вызовите operator[] с помощью ->:

myMap->operator[]("hi") = 20.0;

insert ожидает std::map::value_type, что в вашем случае составляет std::pair<const string, double>.Назовите это так:

myMap->insert(make_pair("hi", 20.0));

или

myMap->insert({"hi", 20.0});

Обратите внимание, что если запись с таким же ключом уже существует, использование квадратных скобок (любой формы) заменит значение этой записии использование insert (любая форма) ничего не сделает и оставит предыдущее значение в покое. (из комментария @aschepler)

...