Карта C ++доступ - PullRequest
       35

Карта C ++доступ

9 голосов
/ 22 января 2012

Я создал карту векторов, которая выглядит следующим образом:

map<string, vector<char> > myMap;
string key = "myKey";
vector<char> myVector;
myMap[key] = myVector;

Я хочу иметь возможность добавлять 'char's' к вектору на карте, но я не могу понять, какдоступ к указанному вектору для добавления после создания определенного ключа / значения (вектора).Какие-либо предложения?Я перебираю char и, возможно, добавлю много к вектору, поэтому было бы неплохо иметь простой способ сделать это.Спасибо.


Я бы хотел, чтобы вектор на карте добавлялся по мере продвижения.Мне не нужен оригинальный вектор ... Мне просто нужно вернуть карту ключа / вектора, которую я создал (после добавления), чтобы я мог передать ее другой функции.Что делает * in map *>?Это ссылка на указатель?(Я еще не попал туда на лекции) Кроме того, мне нужно: myMap [key] -> push_back ('s');или myMap [ключ] .push_back ('s');??

Ответы [ 4 ]

11 голосов
/ 22 января 2012

Для добавления:

myMap[key].push_back('c');

Или используйте myMap.find, но тогда вам нужно проверить, получите ли вы итератор end.operator[] возвращает ссылку на vector.

Но это изменяет vector, хранящийся в map, а не оригинал, поскольку вы сохранили копию в map сmyMap[key] = myVector;.Если это не то, что вам нужно, вы должны переосмыслить свой дизайн и, возможно, сохранить (умные) указатели на векторы на вашей карте.

5 голосов
/ 22 января 2012

Если вы знаете ключ:

string key = "something";
char ch = 'a'; // the character you want to append

map<string, vector<char> >::iterator itr = myMap.find(key);
if(itr != myMap.end())
{
    vector<char> &v = itr->second;
    v.push_back(ch);
}

вы также можете использовать map::operator[] для доступа к записи карты, но если ключ не существует, будет создана новая запись с этим ключом:

vector<char> &v = myMap[key]; // a map entry will be created if key does not exist
v.push_back(ch);

или просто:

myMap[key].push_back(ch);
1 голос
/ 22 января 2012

Чтобы получить доступ к отображенному значению, которое в вашем случае является вектором, вы просто указываете ключ в квадратных скобках, как и для присвоения значения. Итак, чтобы добавить «а»:

myMap[key].push_back('a');
0 голосов
/ 22 января 2012

У меня есть новое предложение. Вы можете использовать vector<char>* вместо vector<char>, чтобы собрать указатель векторов в вашем map. Для получения дополнительной информации см. Ниже код:

map<string, vector<char>* > myMap;
string key = "myKey";
vector<char>* myVector = new vector<char>();
myMap[key] = myVector;
myMap[key]->push_back('S');
...