цикл QHash по порядку вставки - PullRequest
4 голосов
/ 04 августа 2010

Возможно ли зациклить QHash по порядку вставки? Метод ниже, кажется, зацикливает хэш некоторым другим фактором:

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

EDIT:

Я подумал, что это невозможно с QHash, но что мне вместо этого использовать?

Ответы [ 3 ]

12 голосов
/ 04 августа 2010

Из QHash документации,

QHash неупорядочен, поэтому итератор последовательность не может быть принята за предсказуемы . Если заказ по ключу требуется, используйте QMap

Так что невозможно .

Если вы хотите упорядочить по ключам, используйте QMap вместо ..

Надеюсь, это поможет ..

Редактировать:

Если вам не нужно Key и Value Логическое отображение и только их значения, вы можете использовать

QList<QPair<QString,QString>> pairs;

Например:

Первое значение можно получить с помощью

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

Аналогично для второго значения в QPair,

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

И вы можете перебрать QList , чтобы получить элементы в вставленном порядке ..

1 голос
/ 04 августа 2010

QHash не помнит ваш порядок вставки. Он предназначен для быстрого произвольного доступа. Порядок, который вы получаете с итератором, является произвольным.

0 голосов
/ 04 августа 2010

Если вы только вставляете элементы (без удаления элементов) в QHash, вы можете использовать массив / список параллельно. Это не очень элегантное решение, но то, чего вы хотите, не может быть достигнуто только с контейнером QHash.

...