Pergunta

É possível fazer loop um qhash pela ordem de inserção? O método abaixo parece fazer loop o hash por algum outro fator:

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

EDITAR:

Achei que era impossível com Qhash, mas o que devo usar?

Foi útil?

Solução

A partir de Qhash documentação,

Qhash não é ordenado, então A sequência de um iterador não pode ser considerada previsível. Se a ordem por chave for necessária, use um QMAP

Então é não é possivel.

Se você deseja fazer o pedido com base nas chaves, use QMap em vez de..

Espero que ajude..

Editar:

Se você não precisar Key e Value Mapeamento lógico e apenas seus valores, você pode usar

QList<QPair<QString,QString>> pairs;

Para por exemplo:

O primeiro valor pode ser obtido por

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

Da mesma forma para o segundo valor no Qpair,

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

E você pode iterar sobre o QList para recuperar os elementos na ordem inserida..

Outras dicas

QHash Não se lembra do seu pedido de inserção. Ele foi projetado para acesso aleatório rápido. O pedido que você recebe com o iterador é arbitrário.

Se você Insira elementos (sem remoção de elementos) no QHash Você pode usar uma matriz/lista em paralelo. Não é uma solução muito elegante, mas o que você deseja não pode ser alcançado com QHash Somente contêiner.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top