Abusons de QMap

| traducteur : Thibaut Cuvelier | Qt Quarterly |

La classe QMap<Cle, Valeur> stocke des paires (clé, valeur), où chaque clé est associée à une seule valeur. Cet article présente une méthode très rapide, mais peu propre, pour faire des clés associées à de multiples valeurs.

Cet article est une traduction autorisée de Abusing QMap.

Commentez

- Titre : Abusons de QMap

- Auteurs : traducteur : Thibaut Cuvelier, Qt Quarterly

- Parution : 25 février 2009

- Mise à jour : 1 août 2011

- Licence : Copyright ® 2009 Nokia Corporation. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. L'article original

- II. Abusons de QMap

- III. Divers

I - L'article original

Qt Quarterly est une revue trimestrielle électronique proposée par Qt à destination des développeurs et utilisateurs de Qt. Vous pouvez trouver les versions originales.

Nokia, Qt, Qt Quarterly et leurs logos sont des marques déposées de Nokia Corporation en Finlande et/ou dans les autres pays. Les autres marques déposées sont détenues par leurs propriétaires respectifs.

Cet article est la traduction de l'article Abusing QMap paru dans la Qt Quarterly Issue 1.

Cet article est une traduction de l'un des tutoriels en anglais écrits par Nokia Corporation and/or its subsidiary(-ies), inclus dans la documentation de Qt. Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia.

II - Abusons de QMap

L'idée de base est de remplacer le type de Valeur par un type plus complexe, comme QValueList, comme ceci :

QMap<QString, QStringList> map;

QStringList est une version améliorée de QString.

Insérer une valeur dans une "multimap" est simple :

map["presidents"].append("George Washington");

Si la multi-map contient déjà une clé presidents, map[presidents] retourne une référence au QStringList qui lui correspond. Sinon, une QStringList est créée automatiquement.

Les autres opérations, comme tester la présence d'une paire et sa suppression, sont tout aussi faciles.

if ( map["presidents"].contains("Bill Clinton" ) )
map["presidents"].remove  ("Ronald Reagan") ;

L'opération remove() ci-dessus supprime la paire ("presidents", "Ronald Reagan") de map, si elle la contient. Sinon, l'opération ne fera rien. Vous pouvez même insérer la même paire plusieurs fois.

map["presidents"].append( "George Bush" );
map["presidents"].append( "George Bush" );

En supprimer une est aussi rapide.

map["presidents"].remove(
map["presidents"].find("George Bush")
);

En programmation comme en politique, les valeurs dupliquées ne sont pas toujours les bienvenues. C'est pourquoi elles peuvent être évitées.

if ( ! map["presidents"].contains("John Adams") )
map["presidents"].append  ("John Adams") ;

Et elles peuvent être facilement entièrement supprimées.

map["presidents"].remove( "John Adams" );

(NdT :) Depuis Qt4, nous avons droit au QMultiMap, qui permet de faire très exactement la même chose.

III - Divers

Ceci a été écrit pour Qt3. Cependant, la manière de procéder est intéressante pour comprendre le mode de fonctionnement de QMultiMap.

J'aimerais, ici, adresser un grand merci au groupe Qt, pour toute l'aide et les encouragements apportés lors de la traduction de ces articles, et, plus particulièrement, à Alp, yan, IrmatDen, Buggen25, et kinji1. Un tout grand merci à matrix788 pour sa relecture !

Au nom de toute l'équipe Qt, j'aimerais adresser le plus grand remerciement à Nokia pour nous avoir autorisé la traduction de cet article !