Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

loop QHash by insert order

Tags:

c++

qt

qhash

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?

like image 846
Dennis Avatar asked Aug 04 '10 10:08

Dennis


2 Answers

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

like image 199
liaK Avatar answered Oct 20 '22 14:10

liaK


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

like image 35
deinst Avatar answered Oct 20 '22 14:10

deinst