Цикл 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
только контейнер