Использование функции .at()
не больше не является стандартом.Это в стандарте C + 11 (см. doc ).
Теперь, это,
string * val_ptr = my_map->operator[](key);
, что является правильным, но оно должно быть записано как:
string * val_ptr = (*my_map)[key];
, поскольку это более кратко.
Что касается ошибки компилятора, то она где-то еще.
На самом деле, я считаю, проблема возникла откуда-то и вызвана объявлением указателя карты.Почему бы вам не объявить карту как:
map<int, string[4]> my_map; //no pointer
, а затем использовать
string * val_ptr = my_map[key];
Еще лучше, если вы используете std::vector
:
std::map<int, std::vector<std::string> > my_map; //no pointer
и затем используйте
std::vector<std::string> & val = my_map[key];