2010-11-16 4 views
0

Je ne sais pas si je fais ça correctement, C++ n'est pas une langue maternelle pour moi.tableau de cartes aide C++/qt

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"); ... 

Maintenant, je veux parcourir l'ensemble mapArray. Quelle est la meilleure façon de procéder?

+0

Pendant que vous itérez le tableau que vous avez besoin à la fois la clé et la valeur, ou tout simplement la valeur? – CiscoIPPhone

Répondre

1

Non. Vous semblez rendre les choses beaucoup plus compliquées que nécessaire. Au moins des regards des choses, vous n'avez pas besoin d'un pointeur ou un tableau, juste un objet 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"; 
+0

J'utilise en fait le tableau de cartes car il y a des sous-menus liés à chaque mapArray [X]. –

+0

@ uer375566: Il n'est toujours pas clair pour moi que vous avez besoin d'un tableau de cartes. Puisque vous avez (au moins dans l'exemple) gardé vos clés globalement uniques, vous pouvez/pourriez apparemment utiliser une seule carte pour chacune d'entre elles. –

2

Vous n'avez pas besoin du pointeur. Débarrassez-vous de celui-ci et il suffit d'utiliser map à sa place:

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"); ... 

Pour itérer tous, vous devrez parcourir le tableau, puis à travers les cartes.

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; 
     ... 
    } 
} 

Comme vous pouvez le voir, le QMap iterator est un QPair de la clé et la valeur. Vous pouvez les récupérer séparément en utilisant first et seconds comme je l'ai ci-dessus.