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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top