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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top