Цикл QHash по порядку вставки

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

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

РЕДАКТИРОВАТЬ:

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

3 ответа

Решение

Из документации 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 чтобы получить элементы во вставленном порядке.

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

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

Другие вопросы по тегам