Справка по массиву карт c ++ / qt - PullRequest
0 голосов
/ 17 ноября 2010

Не знаю, правильно ли я это делаю, с ++ для меня не родной язык.

QMap < QString, QString > *mapArray;
QMap < QString, QString > map[10];
mapArray = map;

mapArray[0].insert("key1", "value1");
mapArray[0].insert("key1-1", "value1-1");
mapArray[1].insert("key2", "value2");
mapArray[2].insert("key3", "value3");
mapArray[2].insert("key3-1", "value3-1"); ...

Теперь я хочу перебрать весь массив mapArray. Каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

Вам не нужен указатель. Избавьтесь от него и просто используйте map вместо него:

QMap < QString, QString > map[10];

map[0].insert("key1", "value1");
map[0].insert("key1-1", "value1-1");
map[1].insert("key2", "value2");
map[2].insert("key3", "value3");
map[2].insert("key3-1", "value3-1"); ...

Чтобы перебрать их все, вам нужно перебрать массив, а затем и карты.

for (int i = 0; i < 10; ++i)
{
    for (QMap<QString, QString>::iterator it = map[i].begin(); it != map[i].end(); ++it)
    {
         const QString& key = it->first;
         QString& value = it->second;
         ...
    }
}

Как видите, итератор QMap представляет собой QPair ключа и значения. Вы можете получить их отдельно, используя first и seconds, как у меня выше.

1 голос
/ 17 ноября 2010

Нет.Вы, кажется, делаете вещи намного сложнее, чем необходимо.По крайней мере, вам не нужен указатель или массив, просто объект QMap:

QMap<QString, QString> map;

map.insert("Key1", "value1");
map.insert("Key1-1", "value1-1");
map.insert("key2", "value2");

QMap<QString, QString>::const_iterator pos;

for (pos=map.constBegin(); pos!=map.constEnd(); ++pos)
    std::cout << pos.key() << ": " << pos.value() << "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...