c++qtqhash

loop QHash by insert order


Is it possible to loop a QHash by the insert order? The method below seem to loop the hash by some other factor:

QHashIterator<QString, QString> i(hash);
while (i.hasNext()) {
    i.next();
    qDebug() << i.key() << ": " << i.value();
}

EDIT:

I figured it was impossible with QHash but what should I use instead?


Solution

  • From QHash documentation,

    QHash is unordered, so an iterator's sequence cannot be assumed to be predictable. If ordering by key is required, use a QMap

    So it is not possible.

    If you want ordering based on the keys, use QMap instead..

    Hope it helps..

    Edit:

    If you don't need Key and Value Logical mapping and just their values, you can use

    QList<QPair<QString,QString>> pairs;
    

    For e.g:

    The first value can be obtained by

    QString firstValue = pairs.at(0).first;
    

    Similarly for the second value in the QPair,

    QString secondValue = pairs.at(0).second;
    

    And you can iterate over the QList to retrieve the elements in the inserted order..