QHash boucle de commande insert
Question
Est-il possible de boucler un QHash par l'ordre d'insertion? La méthode semble ci-dessous pour boucler le hachage par un autre facteur:
QHashIterator<QString, QString> i(hash);
while (i.hasNext()) {
i.next();
qDebug() << i.key() << ": " << i.value();
}
EDIT:
Je me suis dit qu'il était impossible avec QHash mais que dois-je utiliser à la place?
La solution
De QHash documentation,
QHash est non ordonnée, donc est un iterator séquence ne peut pas être considérée comme étant prévisible . Si la commande par clé est nécessaire, utilisez un QMap
Il est donc pas possible .
Si vous voulez la commande en fonction des clés, utilisez QMap
à la place ..
it helps ..
Edit:
Si vous ne pas besoin Key
et Value
mapping logique et seulement leurs valeurs, vous pouvez utiliser
QList<QPair<QString,QString>> pairs;
Pour par exemple:
La première valeur peut être obtenue en
QString firstValue = pairs.at(0).first;
De même, pour la deuxième valeur dans le QPair,
QString secondValue = pairs.at(0).second;
Et vous pouvez itérer sur la QList
pour récupérer les éléments dans l'ordre inséré ..
Autres conseils
QHash
ne se rappelle pas votre commande d'insertion. Il est conçu pour un accès aléatoire rapide. L'ordre que vous obtenez avec l'itérateur est arbitraire.
Si vous uniquement éléments d'insertion (aucun enlèvement de l'élément) dans le QHash
, vous pouvez utiliser un tableau / liste en parallèle. Il n'est pas une solution très élégante, mais ce que vous voulez ne peut être atteint avec un réservoir de QHash
uniquement.