tags:

views:

68

answers:

3

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?

+1  A: 

QHash doesn't remember your insert order. It is designed for fast random access. The order you get with the iterator is arbitrary.

deinst
A: 

If you only insert elements (no element removal) in the QHash you could use an array/list in parallel. It is not a very elegant solution but what you want cannot be achieved with QHash container only.

Iulian Şerbănoiu
+3  A: 

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..

liaK
Thanks, but I want to order the hash from the insert time not the key.
Dennis
In that case, **it is not possible**.
liaK