bucle Qhash por orden de inserción
Pregunta
¿Es posible recorrer un Qhash por orden de inserción? El siguiente método parece enrollar el hash por algún otro factor:
QHashIterator<QString, QString> i(hash);
while (i.hasNext()) {
i.next();
qDebug() << i.key() << ": " << i.value();
}
EDITAR:
Pensé que era imposible con Qhash, pero ¿qué debo usar en su lugar?
Solución
De Qhash documentación,
Qhash no está ordenado, así que No se puede suponer que la secuencia de un iterador sea predecible. Si se requiere ordenar por clave, use un QMAP
Así es imposible.
Si desea ordenar en función de las teclas, use QMap
en cambio..
Espero eso ayude..
Editar:
Si usted no necesitar Key
y Value
Mapeo lógico y solo sus valores, puede usar
QList<QPair<QString,QString>> pairs;
Para EG:
El primer valor se puede obtener por
QString firstValue = pairs.at(0).first;
Del mismo modo para el segundo valor en el QPair,
QString secondValue = pairs.at(0).second;
Y puedes iterar sobre el QList
Para recuperar los elementos en el orden insertado..
Otros consejos
QHash
No recuerda su orden de inserción. Está diseñado para un acceso aleatorio rápido. El pedido que recibe con el iterador es arbitrario.
Si usted solamente insertar elementos (sin eliminación de elementos) en el QHash
Puede usar una matriz/lista en paralelo. No es una solución muy elegante, pero lo que quieres no se puede lograr con QHash
solo contenedor.