En esta página

QHash::iterator Class

class QHash::iterator

La clase QHash::iterator proporciona un iterador no-const de estilo STL para QHash. Más...

Funciones públicas

iterator()
const Key &key() const
T &value() const
bool operator!=(const QHash<Key, T>::const_iterator &other) const
bool operator!=(const QHash<Key, T>::iterator &other) const
T &operator*() const
QHash<Key, T>::iterator &operator++()
QHash<Key, T>::iterator operator++(int)
T *operator->() const
bool operator==(const QHash<Key, T>::const_iterator &other) const
bool operator==(const QHash<Key, T>::iterator &other) const

Descripción detallada

QHash<Key, T>::iterator permite iterar sobre un QHash y modificar el valor (pero no la clave) asociado a una clave concreta. Si desea iterar sobre una const QHash, debe utilizar QHash::const_iterator. Generalmente es una buena práctica usar QHash::const_iterator sobre un QHash no-const también, a menos que necesite cambiar el QHash a través del iterador. Los iteradores const son ligeramente más rápidos y pueden mejorar la legibilidad del código.

El constructor por defecto QHash::iterator crea un iterador no inicializado. Debes inicializarlo usando una función QHash como QHash::begin(), QHash::end(), o QHash::find() antes de que puedas empezar a iterar. He aquí un bucle típico que imprime todos los pares (clave, valor) almacenados en un hash:

QHash<QString, int> hash;
hash.insert("January", 1);
hash.insert("February", 2);
//...
hash.insert("December", 12);

for (auto i = hash.cbegin(), end = hash.cend(); i != end; ++i)
    cout << qPrintable(i.key()) << ": " << i.value() << endl;

A diferencia de QMap, que ordena sus elementos por clave, QHash almacena sus elementos en un orden arbitrario.

He aquí un ejemplo que incrementa en 2 cada valor almacenado en QHash:

for (auto i = hash.begin(), end = hash.end(); i != end; ++i)
    i.value() += 2;

Para eliminar elementos de un QHash se puede utilizar erase_if(QHash<Key, T> &map, Predicate pred):

erase_if(hash, [](const QHash<QString, int>::iterator it) { return it.value() > 10; });

Se pueden utilizar múltiples iteradores sobre el mismo hash. Sin embargo, hay que tener en cuenta que cualquier modificación realizada directamente en QHash (insertar y eliminar elementos) puede hacer que los iteradores dejen de ser válidos.

Insertar elementos en el hash o llamar a métodos como QHash::reserve() o QHash::squeeze() puede invalidar todos los iteradores que apunten al hash. Se garantiza que los iteradores seguirán siendo válidos mientras QHash no tenga que aumentar/reducir su tabla hash interna. El uso de cualquier iterador después de que se haya producido una operación de reflash dará lugar a un comportamiento indefinido.

Si necesitas mantener iteradores durante un largo periodo de tiempo, te recomendamos que utilices QMap en lugar de QHash.

Advertencia: Los iteradores sobre contenedores implícitamente compartidos no funcionan exactamente como los iteradores STL. Deberías evitar copiar un contenedor mientras los iteradores están activos en ese contenedor. Para más información, lea Problema de los iteradores compartidos implícitamente.

Véase también QHash::const_iterator, QHash::key_iterator, y QHash::key_value_iterator.

Documentación de funciones miembro

[constexpr noexcept] iterator::iterator()

Construye un iterador no inicializado.

Funciones como key(), value(), y operator++() no deben ser llamadas en un iterador no inicializado. Utilice operator=() para asignarle un valor antes de utilizarlo.

Véase también QHash::begin() y QHash::end().

[noexcept] const Key &iterator::key() const

Devuelve la clave del elemento actual como una referencia constante.

No hay forma directa de cambiar la clave de un elemento a través de un iterador, aunque puede hacerse llamando a QHash::erase() seguido de QHash::insert().

Véase también value().

[noexcept] T &iterator::value() const

Devuelve una referencia modificable al valor del elemento actual.

Puede cambiar el valor de un elemento utilizando value() en el lado izquierdo de una asignación, por ejemplo:

if (i.key() == "Hello")
    i.value() = "Bonjour";

Véase también key() y operator*().

[noexcept] bool iterator::operator!=(const QHash<Key, T>::iterator &other) const

[noexcept] bool iterator::operator!=(const QHash<Key, T>::const_iterator &other) const

Devuelve true si other apunta a un elemento distinto de este iterador; en caso contrario devuelve false.

Véase también operator==().

[noexcept] T &iterator::operator*() const

Devuelve una referencia modificable al valor del elemento actual.

Igual que value().

Véase también key().

[noexcept] QHash<Key, T>::iterator &iterator::operator++()

El operador prefijo ++ (++i) avanza el iterador al siguiente elemento del hash y devuelve un iterador al nuevo elemento actual.

Llamar a esta función en QHash::end() conduce a resultados indefinidos.

[noexcept] QHash<Key, T>::iterator iterator::operator++(int)

El operador postfijo ++ (i++) avanza el iterador al siguiente elemento del hash y devuelve un iterador al elemento previamente actual.

Se trata de una función sobrecargada.

[noexcept] T *iterator::operator->() const

Devuelve un puntero al valor del elemento actual.

Véase también value().

[noexcept] bool iterator::operator==(const QHash<Key, T>::iterator &other) const

[noexcept] bool iterator::operator==(const QHash<Key, T>::const_iterator &other) const

Devuelve true si other apunta al mismo elemento que este iterador; en caso contrario devuelve false.

Véase también operator!=().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.