Loop Qhash durch Einfügenbestellung
Frage
Ist es möglich, einen Qhash nach der Auftragsbestellung zu schleifen? Die folgende Methode scheint den Hash mit einem anderen Faktor zu schleifen:
QHashIterator<QString, QString> i(hash);
while (i.hasNext()) {
i.next();
qDebug() << i.key() << ": " << i.value();
}
BEARBEITEN:
Ich dachte, es wäre unmöglich mit Qhash, aber was soll ich stattdessen verwenden?
Lösung
Aus Qhash Dokumentation,
Qhash ist so nicht ordnungsgemäß Die Reihenfolge eines Iterators kann nicht als vorhersehbar angesehen werden. Wenn Bestellung nach Schlüssel erforderlich ist, verwenden Sie a QMAP
So ist es nicht möglich.
Wenn Sie basierend auf den Schlüsseln bestellen möchten, verwenden Sie QMap
stattdessen..
Ich hoffe es hilft..
Bearbeiten:
Wenn du nicht brauchen Key
und Value
Logische Zuordnung und nur deren Werte können Sie verwenden
QList<QPair<QString,QString>> pairs;
Für zB:
Der erste Wert kann durch erhalten werden durch
QString firstValue = pairs.at(0).first;
Ähnlich für den zweiten Wert im Qpair,
QString secondValue = pairs.at(0).second;
Und Sie können über die Itereration QList
Um die Elemente in der eingefügten Reihenfolge abzurufen..
Andere Tipps
QHash
Erinnert sich nicht an Ihre Einfügungsbestellung. Es ist für einen schnellen Zufallszugriff ausgelegt. Die Bestellung, die Sie mit dem Iterator erhalten, ist willkürlich.
Wenn du nur Einfügen Elemente (keine Elemententfernung) in die QHash
Sie können ein Array/eine Liste parallel verwenden. Es ist keine sehr elegante Lösung, aber was Sie wollen, kann nicht erreicht werden QHash
Nur Container.