Доступ к элементам внутри карты <int, string [4]> - PullRequest
0 голосов
/ 11 декабря 2011

Как мне получить доступ к элементам со следующей карты:

map<int, string[4]> * my_map;

Я делал это с помощью оператора at ()

string * val_ptr = my_map->at(key);

Недавно я обнаружил, что этонестандартная функция моего компилятора и правильный способ сделать это через operator[].К сожалению, компилятор продолжает пытаться преобразовать мой ключ в string [4]:

string * val_ptr = my_map->operator[](key);

error: conversion from ‘int’ to non-scalar type ‘std::string [4]’ requested

Я смотрел в Интернете, но, похоже, нет примеров с картой строковых массивов.Я делаю что-то недействительное?Должен ли я использовать вектор вместо этого, и если да, будет ли он медленнее создавать и получать к нему доступ?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Вы можете использовать std::map<int, std::array<std::string,4> > (или иметь свой собственный class fourstring_t, содержащий четыре строки) и использовать std::map<int,fourstring_t>, а также можете использовать

 string second = (my_map->at(key))[1];

для получения второй строки (ранга 1) в вашем массиве строк.

И метод at является стандартным, как напомнил Наваз.

Как напомнил UncleBens, вам необходимо присвоить тип fourstring_t.

2 голосов
/ 11 декабря 2011

Использование функции .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]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...