Sur cette page

QMultiHash::iterator Class

class QMultiHash::iterator

La classe QMultiHash::iterator fournit un itérateur non-const de style STL pour QMultiHash. Plus d'informations...

Fonctions publiques

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

Description détaillée

QMultiHash<Key, T>::iterator vous permet d'itérer sur un QMultiHash et de modifier la valeur (mais pas la clé) associée à une clé particulière. Si vous souhaitez itérer sur un const QMultiHash, vous devez utiliser QMultiHash::const_iterator. Il est généralement conseillé d'utiliser QMultiHash::const_iterator sur un QMultiHash non constant, à moins que vous n'ayez besoin de modifier le QMultiHash par l'intermédiaire de l'itérateur. Les itérateurs const sont légèrement plus rapides et peuvent améliorer la lisibilité du code.

Le constructeur par défaut QMultiHash::iterator crée un itérateur non initialisé. Vous devez l'initialiser à l'aide d'une fonction QMultiHash comme QMultiHash::begin(), QMultiHash::end() ou QMultiHash::find() avant de pouvoir commencer l'itération. Voici une boucle typique qui imprime toutes les paires (clé, valeur) stockées dans un hachage :

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;

Contrairement à QMap, qui classe ses éléments par clé, QMultiHash stocke ses éléments dans un ordre arbitraire.

Voici un exemple qui incrémente de 2 chaque valeur stockée dans QMultiHash:

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

Pour supprimer des éléments d'un QMultiHash, vous pouvez utiliser erase_if(QMultiHash<Key, T> &map, Predicate pred) :

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

Plusieurs itérateurs peuvent être utilisés sur le même hachage. Cependant, il faut savoir que toute modification effectuée directement sur QHash (insertion et suppression d'éléments) peut rendre les itérateurs invalides.

L'insertion d'éléments dans le hachage ou l'appel à des méthodes telles que QHash::reserve() ou QHash::squeeze() peut invalider tous les itérateurs pointant vers le hachage. La validité des itérateurs n'est garantie que tant que le site QHash n'a pas à augmenter/réduire sa table de hachage interne. L'utilisation d'un itérateur après une opération de réorganisation de la table de hachage entraînera un comportement indéfini.

Si vous devez conserver des itérateurs sur une longue période, nous vous recommandons d'utiliser QMultiMap plutôt que QHash.

Attention : Les itérateurs sur des conteneurs implicitement partagés ne fonctionnent pas exactement comme les itérateurs STL. Vous devez éviter de copier un conteneur lorsque des itérateurs sont actifs sur ce conteneur. Pour plus d'informations, lisez Problème des itérateurs à partage implicite.

Voir aussi QMultiHash::const_iterator, QMultiHash::key_iterator, et QMultiHash::key_value_iterator.

Documentation sur les fonctions membres

[constexpr noexcept] iterator::iterator()

Construit un itérateur non initialisé.

Les fonctions telles que key(), value() et operator++() ne doivent pas être appelées sur un itérateur non initialisé. Utilisez operator=() pour lui attribuer une valeur avant de l'utiliser.

Voir également QMultiHash::begin() et QMultiHash::end().

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

Renvoie la clé de l'élément courant sous la forme d'une référence constante.

Il n'existe pas de moyen direct de modifier la clé d'un élément par l'intermédiaire d'un itérateur, mais il est possible de le faire en appelant QMultiHash::erase() suivi de QMultiHash::insert().

Voir aussi value().

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

Renvoie une référence modifiable à la valeur de l'élément en cours.

Vous pouvez modifier la valeur d'un élément en utilisant value() du côté gauche d'une affectation, par exemple :

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

Voir aussi key() et operator*().

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

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

Renvoie true si other pointe vers un élément différent de cet itérateur ; sinon, renvoie false.

Voir aussi operator==().

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

Renvoie une référence modifiable à la valeur de l'élément en cours.

Identique à value().

Voir aussi key().

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

L'opérateur préfixe ++ (++i) fait passer l'itérateur à l'élément suivant du hachage et renvoie un itérateur vers le nouvel élément courant.

L'appel de cette fonction sur QMultiHash::end() conduit à des résultats indéfinis.

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

L'opérateur postfixe ++ (i++) fait passer l'itérateur à l'élément suivant du hachage et renvoie un itérateur à l'élément courant précédent.

Il s'agit d'une fonction surchargée.

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

Renvoie un pointeur sur la valeur de l'élément en cours.

Voir aussi value().

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

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

Renvoie true si other pointe sur le même élément que cet itérateur ; sinon, renvoie false.

Voir aussi 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.