Sur cette page

QHash Class

template <typename Key, typename T> class QHash

La classe QHash est une classe modèle qui fournit un dictionnaire basé sur une table de hachage. Plus d'informations...

En-tête : #include <QHash>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Cette classe est comparable à l'égalité.

Note : Toutes les fonctions de cette classe sont réentrantes.

Types publics

Fonctions publiques

QHash()
QHash(std::initializer_list<std::pair<Key, T>> list)
QHash(InputIterator begin, InputIterator end)
QHash(const QHash<Key, T> &other)
QHash(QHash<Key, T> &&other)
~QHash()
(since 6.4) auto asKeyValueRange() &&
(since 6.4) auto asKeyValueRange() &
(since 6.4) auto asKeyValueRange() const &&
(since 6.4) auto asKeyValueRange() const &
QHash<Key, T>::iterator begin()
QHash<Key, T>::const_iterator begin() const
qsizetype capacity() const
QHash<Key, T>::const_iterator cbegin() const
QHash<Key, T>::const_iterator cend() const
void clear()
QHash<Key, T>::const_iterator constBegin() const
QHash<Key, T>::const_iterator constEnd() const
QHash<Key, T>::const_iterator constFind(const Key &key) const
QHash<Key, T>::const_key_value_iterator constKeyValueBegin() const
QHash<Key, T>::const_key_value_iterator constKeyValueEnd() const
bool contains(const Key &key) const
qsizetype count(const Key &key) const
qsizetype count() const
QHash<Key, T>::iterator emplace(Key &&key, Args &&... args)
QHash<Key, T>::iterator emplace(const Key &key, Args &&... args)
bool empty() const
QHash<Key, T>::iterator end()
QHash<Key, T>::const_iterator end() const
QHash<Key, T>::iterator erase(QHash<Key, T>::const_iterator pos)
QHash<Key, T>::iterator find(const Key &key)
QHash<Key, T>::const_iterator find(const Key &key) const
void insert(const QHash<Key, T> &other)
QHash<Key, T>::iterator insert(const Key &key, const T &value)
(since 6.11) QHash<Key, T>::iterator insert(Key &&key, T &&value)
(since 6.11) QHash<Key, T>::iterator insert(Key &&key, const T &value)
(since 6.11) QHash<Key, T>::iterator insert(const Key &key, T &&value)
(since 6.9) QHash<Key, T>::TryEmplaceResult insertOrAssign(K &&key, Value &&value)
(since 6.9) QHash<Key, T>::TryEmplaceResult insertOrAssign(Key &&key, Value &&value)
(since 6.9) QHash<Key, T>::TryEmplaceResult insertOrAssign(const Key &key, Value &&value)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> insert_or_assign(K &&key, Value &&value)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> insert_or_assign(Key &&key, Value &&value)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> insert_or_assign(const Key &key, Value &&value)
(since 6.9) QHash<Key, T>::key_value_iterator insert_or_assign(QHash<Key, T>::const_iterator hint, K &&key, Value &&value)
(since 6.9) QHash<Key, T>::key_value_iterator insert_or_assign(QHash<Key, T>::const_iterator hint, Key &&key, Value &&value)
(since 6.9) QHash<Key, T>::key_value_iterator insert_or_assign(QHash<Key, T>::const_iterator hint, const Key &key, Value &&value)
bool isEmpty() const
Key key(const T &value) const
Key key(const T &value, const Key &defaultKey) const
QHash<Key, T>::key_iterator keyBegin() const
QHash<Key, T>::key_iterator keyEnd() const
QHash<Key, T>::key_value_iterator keyValueBegin()
QHash<Key, T>::const_key_value_iterator keyValueBegin() const
QHash<Key, T>::key_value_iterator keyValueEnd()
QHash<Key, T>::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
QList<Key> keys(const T &value) const
float load_factor() const
bool remove(const Key &key)
(since 6.1) qsizetype removeIf(Predicate pred)
void reserve(qsizetype size)
qsizetype size() const
void squeeze()
void swap(QHash<Key, T> &other)
T take(const Key &key)
(since 6.9) QHash<Key, T>::TryEmplaceResult tryEmplace(K &&key, Args &&... args)
(since 6.9) QHash<Key, T>::TryEmplaceResult tryEmplace(Key &&key, Args &&... args)
(since 6.9) QHash<Key, T>::TryEmplaceResult tryEmplace(const Key &key, Args &&... args)
(since 6.9) QHash<Key, T>::TryEmplaceResult tryInsert(K &&key, const T &value)
(since 6.9) QHash<Key, T>::TryEmplaceResult tryInsert(const Key &key, const T &value)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> try_emplace(K &&key, Args &&... args)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> try_emplace(Key &&key, Args &&... args)
(since 6.9) std::pair<QHash<Key, T>::key_value_iterator, bool> try_emplace(const Key &key, Args &&... args)
(since 6.9) QHash<Key, T>::key_value_iterator try_emplace(QHash<Key, T>::const_iterator hint, K &&key, Args &&... args)
(since 6.9) QHash<Key, T>::key_value_iterator try_emplace(QHash<Key, T>::const_iterator hint, Key &&key, Args &&... args)
(since 6.9) QHash<Key, T>::key_value_iterator try_emplace(QHash<Key, T>::const_iterator hint, const Key &key, Args &&... args)
T value(const Key &key) const
T value(const Key &key, const T &defaultValue) const
QList<T> values() const
QHash<Key, T> &operator=(QHash<Key, T> &&other)
QHash<Key, T> &operator=(const QHash<Key, T> &other)
T &operator[](const Key &key)
const T operator[](const Key &key) const
(since 6.1) qsizetype erase_if(QHash<Key, T> &hash, Predicate pred)
(since 6.5) size_t qHash(Enum key, size_t seed = 0)
taille_t qHash(const QStringRef &key, size_t seed = 0)
taille_t qHash(const QMqttTopicFilter &filter, size_t seed = 0)
taille_t qHash(QSslEllipticCurve key, size_t seed = 0)
size_t qHash(const QGeoCoordinate &coordinate, size_t seed = 0)
(since 6.0) taille_t qHash( clé QByteArrayView, taille_t seed = 0)
taille_t qHash(const QMqttTopicName &name, size_t seed = 0)
taille_t qHash(const QOcspResponse &key, size_t seed = 0)
taille_t qHash(uint key, size_t seed = 0)
taille_t qHash(ulong key, size_t seed = 0)
taille_t qHash( clé ushort, taille_t seed = 0)
(since 6.0) taille_t qHash( clé wchar_t, taille_t seed = 0)
taille_t qHash( clé QDate, taille_t seed = 0)
taille_t qHash(const QSslCertificate &key, size_t seed = 0)
size_t qHash( clé QLatin1StringView, taille_t seed = 0)
taille_t qHash(const QSslError &key, size_t seed = 0)
(since 6.0) taille_t qHash(QPoint key, size_t seed = 0)
taille_t qHash(QTime key, size_t seed = 0)
(since 6.9) taille_t qHash(T key, size_t seed)
taille_t qHash(char key, size_t seed = 0)
(since 6.0) taille_t qHash(char16_t clé, size_t graine = 0)
(since 6.0) taille_t qHash(char32_t clé, size_t graine = 0)
(since 6.0) taille_t qHash(char8_t clé, size_t graine = 0)
taille_t qHash(const QBitArray &key, size_t seed = 0)
taille_t qHash(const QByteArray &key, size_t seed = 0)
taille_t qHash(const QChar key, size_t seed = 0)
taille_t qHash(const QDateTime &key, size_t seed = 0)
size_t qHash(const QHash<Key, T> &key, size_t seed = 0)
taille_t qHash(const QSet<T> &key, size_t seed = 0)
taille_t qHash(const QString &key, size_t seed = 0)
(since 6.0) taille_t qHash(const QTypeRevision &key, size_t seed = 0)
taille_t qHash(const QUrl &key, size_t seed = 0)
taille_t qHash(const QVersionNumber &key, size_t seed = 0)
taille_t qHash(const T *key, size_t seed = 0)
taille_t qHash(const std::pair<T1, T2> &key, size_t seed = 0)
taille_t qHash(double clé, size_t seed = 0)
taille_t qHash(float key, size_t seed = 0)
taille_t qHash(int key, size_t seed = 0)
taille_t qHash(long key, size_t seed = 0)
taille_t qHash(long double key, size_t seed = 0)
(since 6.8) taille_t qHash(qint128 clé, size_t seed = 0)
taille_t qHash(qint64 clé, size_t graine = 0)
(since 6.8) taille_t qHash(quint128 clé, size_t graine = 0)
taille_t qHash(quint64 clé, size_t graine = 0)
taille_t qHash(short key, size_t seed = 0)
taille_t qHash(signed char key, size_t seed = 0)
(since 6.0) taille_t qHash(std::nullptr_t clé, size_t graine = 0)
taille_t qHash(uchar key, size_t seed = 0)
taille_t qHashBits(const void *p, size_t len, size_t seed = 0)
(since 6.0) taille_t qHashMulti(size_t seed, const T &... args)
(since 6.0) size_t qHashMultiCommutative(size_t seed, const T &... args)
taille_t qHashRange(InputIterator first, InputIterator last, size_t seed = 0)
taille_t qHashRangeCommutative(InputIterator first, InputIterator last, size_t seed = 0)
bool operator!=(const QHash<Key, T> &lhs, const QHash<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QHash<Key, T> &hash)
bool operator==(const QHash<Key, T> &lhs, const QHash<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QHash<Key, T> &hash)

Macros

Description détaillée

QHash<Key, T> est l'une des classes de conteneurs génériques de Qt. Elle stocke des paires (clé, valeur) et permet une consultation très rapide de la valeur associée à une clé.

QHash offre des fonctionnalités très similaires à celles de QMap. Les différences sont les suivantes :

  • QHash permet des recherches plus rapides que QMap(voir Complexité algorithmique pour plus de détails).
  • Lors de l'itération sur un site QMap, les éléments sont toujours triés par clé. Avec QHash, les éléments sont ordonnés de manière arbitraire.
  • Le type de clé d'un QMap doit fournir operator<(). Le type de clé d'un QHash doit fournir operator==() et une fonction de hachage globale appelée qHash() (voir qHash).

Voici un exemple de QHash avec des clés QString et des valeurs int:

QHash<QString, int> hash;

Pour insérer une paire (clé, valeur) dans le hachage, vous pouvez utiliser operator[]() :

hash["one"] = 1;
hash["three"] = 3;
hash["seven"] = 7;

Cela permet d'insérer les trois paires (clé, valeur) suivantes dans le QHash : ("one", 1), ("three", 3) et ("seven", 7). Une autre façon d'insérer des éléments dans le hachage est d'utiliser insert() :

hash.insert("twelve", 12);

Pour rechercher une valeur, utilisez operator[]() ou value() :

int num1 = hash["thirteen"];
int num2 = hash.value("thirteen");

S'il n'y a pas d'élément avec la clé spécifiée dans le hachage, ces fonctions renvoient une valeur construite par défaut.

Si vous souhaitez vérifier si le hachage contient une clé particulière, utilisez contains() :

int timeout = 30;
if (hash.contains("TIMEOUT"))
    timeout = hash.value("TIMEOUT");

Il existe également une surcharge value() qui utilise son deuxième argument comme valeur par défaut s'il n'y a pas d'élément avec la clé spécifiée :

int timeout = hash.value("TIMEOUT", 30);

En général, nous vous recommandons d'utiliser contains() et value() plutôt que operator[]() pour rechercher une clé dans un hachage. En effet, operator[]() insère silencieusement un élément dans le hachage s'il n'en existe aucun avec la même clé (sauf si le hachage est constant). Par exemple, l'extrait de code suivant créera 1000 éléments en mémoire :

// WRONG
QHash<int, QWidget *> hash;
//...
for (int i = 0; i < 1000; ++i) {
    if (hash[i] == okButton)
        cout << "Found button at index " << i << endl;
}

Pour éviter ce problème, remplacez hash[i] par hash.value(i) dans le code ci-dessus.

En interne, QHash utilise une table de hachage pour effectuer des recherches. Cette table de hachage croît automatiquement pour permettre des recherches rapides sans gaspiller trop de mémoire. Vous pouvez toujours contrôler la taille de la table de hachage en appelant reserve() si vous savez déjà approximativement combien d'éléments la QHash contiendra, mais ce n'est pas nécessaire pour obtenir de bonnes performances. Vous pouvez également appeler capacity() pour récupérer la taille de la table de hachage.

QHash ne se réduit pas automatiquement si des éléments sont supprimés de la table. Pour minimiser la mémoire utilisée par la table de hachage, appelez squeeze().

Pour parcourir toutes les paires (clé, valeur) stockées dans une QHash, utilisez asKeyValueRange() :

for (const auto &[key, value] : std::as_const(hash).asKeyValueRange())
    cout << qPrintable(key) << ": " << value << endl;

Cette fonction renvoie un objet range qui peut être utilisé avec des liaisons structurées. Pour un contrôle manuel de l'itérateur, vous pouvez également utiliser des itérateurs traditionnels de style STL (QHash::const_iterator et QHash::iterator) :

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

Pour modifier des valeurs, utilisez des itérateurs :

for (auto it = hash.begin(); it != hash.end(); ++it)
    it.value() += 1;

QHash fournit également des itérateurs de style Java (QHashIterator et QMutableHashIterator) à des fins de compatibilité.

QHash n'étant pas ordonné, la séquence d'un itérateur ne peut pas être considérée comme prévisible. Si l'ordre par clé est nécessaire, utilisez un QMap.

Un QHash n'autorise qu'une seule valeur par clé. Si vous appelez insert() avec une clé qui existe déjà dans la QHash, la valeur précédente est effacée. Par exemple :

hash.insert("plenty", 100);
hash.insert("plenty", 2000);
// hash.value("plenty") == 2000

Si vous devez stocker plusieurs entrées pour la même clé dans la table de hachage, utilisez QMultiHash.

Si vous ne devez extraire que les valeurs d'une table de hachage (et non les clés), vous pouvez également utiliser la méthode basée sur l'intervalle pour :

QHash<QString, int> hash;
//...
for (int value : std::as_const(hash))
    cout << value << endl;

Les éléments peuvent être supprimés de la table de hachage de plusieurs manières. L'une d'entre elles consiste à appeler remove(), ce qui a pour effet de supprimer tout élément ayant la clé donnée. Une autre méthode consiste à utiliser QMutableHashIterator::remove(). En outre, vous pouvez effacer l'ensemble du hachage en utilisant clear().

Les types de données clé et valeur de QHash doivent être des types de données assignables. Vous ne pouvez pas, par exemple, stocker un QWidget en tant que valeur, mais plutôt un QWidget *.

La fonction de hachage

Le type de clé d'un QHash a d'autres exigences que d'être un type de données assignable : il doit fournir operator==(), et il doit également y avoir une fonction de hachage qui renvoie une valeur de hachage pour un argument du type de la clé.

La fonction de hachage calcule une valeur numérique basée sur une clé. Elle peut utiliser n'importe quel algorithme imaginable, tant qu'elle renvoie toujours la même valeur si on lui donne le même argument. En d'autres termes, si e1 == e2, alors hash(e1) == hash(e2) doit également être valable. Toutefois, pour obtenir de bonnes performances, la fonction de hachage doit tenter de renvoyer des valeurs de hachage différentes pour des clés différentes, dans la mesure du possible.

Une fonction de hachage pour un type de clé K peut être fournie de deux manières différentes.

La première consiste à avoir une surcharge de qHash() dans l'espace de noms de K. La fonction qHash() doit avoir l'une de ces signatures :

size_t qHash(K key, size_t seed) ;size_t qHash(const K &key, size_t seed);

size_t qHash(K key);        // deprecated, do not use
size_t qHash(const K &key); // deprecated, do not use

Les surcharges à deux arguments prennent un entier non signé qui doit être utilisé pour amorcer le calcul de la fonction de hachage. Cette graine est fournie par QHash afin d'éviter une famille de algorithmic complexity attacks.

Remarque : dans Qt 6, il est possible de définir une surcharge qHash() ne prenant qu'un seul argument ; la prise en charge de cette fonction est obsolète. À partir de Qt 7, il sera obligatoire d'utiliser une surcharge à deux arguments. Si une surcharge à un argument et une surcharge à deux arguments sont définies pour un type de clé, c'est cette dernière qui est utilisée par QHash (notez que vous pouvez simplement définir une version à deux arguments et utiliser une valeur par défaut pour le paramètre seed). Dans Qt XML 6, il est possible de désactiver la prise en charge de la surcharge à un seul argument qHash en définissant la macro QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD.

La deuxième façon de fournir une fonction de hachage est de spécialiser la classe std::hash pour le type de clé K, et de fournir un opérateur d'appel de fonction approprié :

namespace std
{
    template <> struct hash<K>
    {
        // seed is optional
        size_t operator()(const K &key, size_t seed = 0) const;
    };
}

L'argument seed a la même signification que pour qHash(), et peut être omis.

Cette deuxième méthode permet de réutiliser la même fonction de hachage entre QHash et les conteneurs associatifs non ordonnés de la bibliothèque standard C++. Si une surcharge qHash() et une spécialisation std::hash sont fournies pour un type, la surcharge qHash() est préférée.

Voici une liste partielle des types C++ et Qt XML qui peuvent servir de clés dans un QHash : tout type entier (char, unsigned long, etc.), tout type pointeur, QChar, QString, et QByteArray. Pour tous ces types, l'en-tête <QHash> définit une fonction qHash() qui calcule une valeur de hachage adéquate. De nombreuses autres classes Qt XML déclarent également une surcharge qHash pour leur type ; veuillez vous référer à la documentation de chaque classe.

Si vous souhaitez utiliser d'autres types comme clé, assurez-vous de fournir operator==() et une implémentation de hachage.

La fonction de commodité qHashMulti() peut être utilisée pour implémenter qHash() pour un type personnalisé, où l'on souhaite généralement produire une valeur de hachage à partir de plusieurs champs :

Exemple :

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    QString name() const { return myName; }
    QDate dateOfBirth() const { return myDateOfBirth; }
    //...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator==(const Employee &e1, const Employee &e2)
{
    return e1.name() == e2.name()
           && e1.dateOfBirth() == e2.dateOfBirth();
}

inline size_t qHash(const Employee &key, size_t seed)
{
    return qHashMulti(seed, key.name(), key.dateOfBirth());
}

#endif // EMPLOYEE_H

Dans l'exemple ci-dessus, nous nous sommes appuyés sur l'implémentation propre à Qtt de qHash() pour QString et QDate afin de nous donner une valeur de hachage pour le nom et la date de naissance de l'employé respectivement.

Notez que l'implémentation des surcharges qHash() proposées par Qt XML peut changer à tout moment. Vous ne devez pas vous fier au fait que qHash() donnera les mêmes résultats (pour les mêmes entrées) dans différentes versions de Qt.

Attaques par complexité algorithmique

Toutes les tables de hachage sont vulnérables à une classe particulière d'attaques par déni de service, dans laquelle l'attaquant pré-calcule soigneusement un ensemble de clés différentes qui vont être hachées dans le même godet d'une table de hachage (ou même avoir la même valeur de hachage). L'attaque vise à obtenir le comportement algorithmique le plus défavorable (O(n) au lieu de O(1) amorti, voir Complexité algorithmique pour plus de détails) lorsque les données sont introduites dans la table.

Afin d'éviter ce comportement dans le pire des cas, le calcul de la valeur de hachage effectué par qHash() peut être salé par une graine aléatoire, qui annule l'étendue de l'attaque. Cette graine est générée automatiquement par QHash une fois par processus, puis transmise par QHash en tant que deuxième argument de la surcharge à deux arguments de la fonction qHash().

Cette randomisation de QHash est activée par défaut. Même si les programmes ne devraient jamais dépendre d'un ordre particulier de QHash, il peut y avoir des situations où vous avez temporairement besoin d'un comportement déterministe, par exemple pour le débogage ou les tests de régression. Pour désactiver la randomisation, définissez la variable d'environnement QT_HASH_SEED avec la valeur 0. Vous pouvez également appeler la fonction QHashSeed::setDeterministicGlobalSeed().

Voir aussi QHashIterator, QMutableHashIterator, QMap, et QSet.

Documentation sur les types de membres

QHash::ConstIterator

Qt-style synonyme de QHash::const_iterator.

QHash::Iterator

Qt-style synonyme de QHash::iterator.

QHash::const_key_value_iterator

Le typage QHash::const_key_value_iterator fournit un itérateur constant de style STL pour QHash.

QHash::const_key_value_iterator est essentiellement le même que QHash::const_iterator à la différence que operator*() renvoie une paire clé/valeur au lieu d'une valeur.

Voir aussi QKeyValueIterator.

[alias] QHash::difference_type

Typedef pour ptrdiff_t. Fourni pour la compatibilité STL.

[alias] QHash::key_type

Typedef pour Key. Fourni pour la compatibilité STL.

QHash::key_value_iterator

Le typedef QHash::key_value_iterator fournit un itérateur de style STL pour QHash.

QHash::key_value_iterator est essentiellement le même que QHash::iterator à la différence que operator*() renvoie une paire clé/valeur au lieu d'une valeur.

Voir également QKeyValueIterator.

[alias] QHash::mapped_type

Typedef pour T. Fourni pour la compatibilité STL.

[alias] QHash::size_type

Typedef pour int. Fourni pour la compatibilité STL.

Documentation des fonctions membres

[noexcept] QHash::QHash()

Construit un hachage vide.

Voir aussi clear().

QHash::QHash(std::initializer_list<std::pair<Key, T>> list)

Construit un hachage avec une copie de chacun des éléments de la liste d'initialisation list.

template <typename InputIterator> QHash::QHash(InputIterator begin, InputIterator end)

Construit un hachage avec une copie de chacun des éléments de l'intervalle de l'itérateur [begin, end). Soit les éléments itérés par l'intervalle doivent être des objets avec des membres de données first et second (comme std::pair), convertibles en Key et T respectivement ; soit les itérateurs doivent avoir des fonctions membres key() et value(), renvoyant une clé convertible en Key et une valeur convertible en T respectivement.

[noexcept] QHash::QHash(const QHash<Key, T> &other)

Construit une copie de other.

Cette opération s'effectue en temps constant, car le QHash est implicitement partagé. Cela rend le retour d'un QHash à partir d'une fonction très rapide. Si une instance partagée est modifiée, elle sera copiée (copy-on-write), ce qui prend un temps linéaire.

Voir également operator=().

[noexcept] QHash::QHash(QHash<Key, T> &&other)

Move-construit une instance de QHash, en la faisant pointer sur le même objet que celui vers lequel other pointait.

QHash::~QHash()

Détruit le hachage. Les références aux valeurs du hachage et tous les itérateurs de ce hachage deviennent invalides.

[since 6.4] auto QHash::asKeyValueRange() &

[since 6.4] auto QHash::asKeyValueRange() const &

[since 6.4] auto QHash::asKeyValueRange() &&

[since 6.4] auto QHash::asKeyValueRange() const &&

Renvoie un objet de plage qui permet d'itérer sur ce hachage sous forme de paires clé/valeur. Par exemple, cet objet plage peut être utilisé dans une boucle for basée sur la plage, en combinaison avec une déclaration de liaison structurée :

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

for (auto [key, value] : hash.asKeyValueRange()) {
    cout << qPrintable(key) << ": " << value << endl;
    --value; // convert to JS month indexing
}

Notez que la clé et la valeur obtenues de cette manière sont des références à celles du hachage. Plus précisément, la modification de la valeur modifiera le hachage lui-même.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Ces fonctions ont été introduites dans Qt 6.4.

Voir aussi QKeyValueIterator.

QHash<Key, T>::iterator QHash::begin()

Renvoie un itérateur de style STL pointant sur le premier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi constBegin() et end().

[noexcept] QHash<Key, T>::const_iterator QHash::begin() const

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

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

[noexcept] qsizetype QHash::capacity() const

Renvoie le nombre de godets dans la table de hachage interne de QHash.

Le seul but de cette fonction est de fournir un moyen d'affiner l'utilisation de la mémoire de QHash. En général, vous n'aurez que rarement besoin d'appeler cette fonction. Si vous souhaitez connaître le nombre d'éléments contenus dans la table de hachage, appelez size().

Voir aussi reserve() et squeeze().

[noexcept] QHash<Key, T>::const_iterator QHash::cbegin() const

Renvoie un itérateur constant de style STL pointant sur le premier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi begin() et cend().

[noexcept] QHash<Key, T>::const_iterator QHash::cend() const

Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après le dernier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi cbegin() et end().

[noexcept(...)] void QHash::clear()

Supprime tous les éléments du hachage et libère toute la mémoire utilisée par celui-ci.

Remarque : cette fonction est noexcept lorsque std::is_nothrow_destructible<Node>::value est true.

Voir également remove().

[noexcept] QHash<Key, T>::const_iterator QHash::constBegin() const

Renvoie un itérateur constant de style STL pointant sur le premier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi begin() et constEnd().

[noexcept] QHash<Key, T>::const_iterator QHash::constEnd() const

Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après le dernier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi constBegin() et end().

[noexcept] QHash<Key, T>::const_iterator QHash::constFind(const Key &key) const

Renvoie un itérateur pointant vers l'élément contenant le key dans le hachage.

Si le hachage ne contient pas d'élément avec key, la fonction renvoie constEnd().

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi find().

[noexcept] QHash<Key, T>::const_key_value_iterator QHash::constKeyValueBegin() const

Renvoie un itérateur constant de style STL pointant sur la première entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyValueBegin().

[noexcept] QHash<Key, T>::const_key_value_iterator QHash::constKeyValueEnd() const

Renvoie un itérateur constant de style STL pointant vers l'entrée imaginaire située après la dernière entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi constKeyValueBegin().

[noexcept] bool QHash::contains(const Key &key) const

Renvoie true si le hachage contient un élément avec key; sinon, renvoie false.

Voir aussi count().

[noexcept] qsizetype QHash::count(const Key &key) const

Renvoie le nombre d'éléments associés à key.

Voir aussi contains().

[noexcept] qsizetype QHash::count() const

Identique à size().

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

template <typename... Args> QHash<Key, T>::iterator QHash::emplace(const Key &key, Args &&... args)

template <typename... Args> QHash<Key, T>::iterator QHash::emplace(Key &&key, Args &&... args)

Insère un nouvel élément dans le conteneur. Ce nouvel élément est construit sur place en utilisant args comme arguments pour sa construction.

Retourne un itérateur pointant vers le nouvel élément.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

[noexcept] bool QHash::empty() const

Cette fonction est fournie pour des raisons de compatibilité avec la STL. Elle est équivalente à isEmpty(), renvoyant vrai si le hachage est vide ; sinon, elle renvoie false.

[noexcept] QHash<Key, T>::iterator QHash::end()

Renvoie un itérateur de style STL pointant vers l'élément imaginaire situé après le dernier élément du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi begin() et constEnd().

[noexcept] QHash<Key, T>::const_iterator QHash::end() const

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

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

QHash<Key, T>::iterator QHash::erase(QHash<Key, T>::const_iterator pos)

Supprime du hachage la paire (clé, valeur) associée à l'itérateur pos et renvoie un itérateur vers l'élément suivant du hachage.

Cette fonction n'oblige jamais QHash à réorganiser sa structure de données interne. Cela signifie qu'elle peut être appelée en toute sécurité pendant l'itération et qu'elle n'affectera pas l'ordre des éléments dans le hachage. Par exemple, cette fonction peut être appelée en toute sécurité pendant l'exécution d'une requête :

QHash<QObject *, int> objectHash;
//...
QHash<QObject *, int>::iterator i = objectHash.find(obj);
while (i != objectHash.end() && i.key() == obj) {
    if (i.value() == 0) {
        i = objectHash.erase(i);
    } else {
        ++i;
    }
}

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi remove(), take(), et find().

QHash<Key, T>::iterator QHash::find(const Key &key)

Renvoie un itérateur pointant vers l'élément contenant le key dans le hachage.

Si le hachage ne contient aucun élément avec key, la fonction renvoie end().

Si le hachage contient plusieurs éléments avec key, cette fonction renvoie un itérateur qui pointe sur la valeur la plus récemment insérée. Les autres valeurs sont accessibles en incrémentant l'itérateur. Par exemple, voici un code qui permet d'itérer sur tous les éléments ayant la même clé :

QHash<QString, int> hash;
//...
QHash<QString, int>::const_iterator i = hash.find("HDR");
while (i != hash.end() && i.key() == "HDR") {
    cout << i.value() << endl;
    ++i;
}

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi value() et values().

[noexcept] QHash<Key, T>::const_iterator QHash::find(const Key &key) const

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

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

void QHash::insert(const QHash<Key, T> &other)

Insère tous les éléments du hachage other dans ce hachage.

Si une clé est commune aux deux hachages, sa valeur sera remplacée par la valeur stockée dans other.

QHash<Key, T>::iterator QHash::insert(const Key &key, const T &value)

Insère un nouvel élément avec l'adresse key et la valeur value.

S'il existe déjà un élément avec la valeur key, la valeur de cet élément est remplacée par value.

Retourne un itérateur pointant vers l'élément nouveau/mise à jour.

Attention : Les itérateurs/références renvoyés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

[since 6.11] QHash<Key, T>::iterator QHash::insert(const Key &key, T &&value)

[since 6.11] QHash<Key, T>::iterator QHash::insert(Key &&key, const T &value)

[since 6.11] QHash<Key, T>::iterator QHash::insert(Key &&key, T &&value)

Ces fonctions ont été introduites dans Qt 6.11.

[since 6.9] template <typename Value> QHash<Key, T>::TryEmplaceResult QHash::insertOrAssign(const Key &key, Value &&value)

[since 6.9] template <typename Value> QHash<Key, T>::TryEmplaceResult QHash::insertOrAssign(Key &&key, Value &&value)

[since 6.9] template < typename K, typename Value, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > QHash<Key, T>::TryEmplaceResult QHash::insertOrAssign(K &&key, Value &&value)

Tente d'insérer un élément avec les valeurs key et value. Si un élément avec key existe déjà, sa valeur est remplacée par value.

Retourne une instance de TryEmplaceResult, une structure qui contient un iterator pour l'élément, et un booléen, inserted, indiquant si l'élément a été nouvellement créé (true) ou s'il existait déjà (false).

Ces fonctions ont été introduites dans Qt 6.9.

Voir également insert(), tryEmplace() et tryInsert().

[since 6.9] template <typename Value> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::insert_or_assign(const Key &key, Value &&value)

[since 6.9] template <typename Value> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::insert_or_assign(Key &&key, Value &&value)

[since 6.9] template < typename K, typename Value, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::insert_or_assign(K &&key, Value &&value)

Tente d'insérer un élément avec les valeurs key et value. Si un élément avec key existe déjà, sa valeur est remplacée par value.

Renvoie une paire composée d'un itérateur pointant vers l'élément et d'un booléen indiquant si l'élément a été nouvellement créé (true) ou s'il existait déjà (false).

Ces fonctions sont fournies à des fins de compatibilité avec la bibliothèque standard.

Ces fonctions ont été introduites dans Qt 6.9.

Voir également insert(), tryEmplace(), tryInsert() et insertOrAssign().

[since 6.9] template <typename Value> QHash<Key, T>::key_value_iterator QHash::insert_or_assign(QHash<Key, T>::const_iterator hint, const Key &key, Value &&value)

[since 6.9] template <typename Value> QHash<Key, T>::key_value_iterator QHash::insert_or_assign(QHash<Key, T>::const_iterator hint, Key &&key, Value &&value)

[since 6.9] template < typename K, typename Value, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > QHash<Key, T>::key_value_iterator QHash::insert_or_assign(QHash<Key, T>::const_iterator hint, K &&key, Value &&value)

Tente d'insérer un élément avec les valeurs key et value. Si un élément avec key existe déjà, sa valeur est remplacée par value.

Renvoie une paire composée d'un itérateur pointant vers l'élément et d'un booléen indiquant si l'élément a été nouvellement créé (true) ou s'il existait déjà (false).

hint est ignoré.

Ces fonctions sont fournies à des fins de compatibilité avec la bibliothèque standard.

Ces fonctions ont été introduites dans Qt 6.9.

Voir également insert(), tryEmplace() et insertOrAssign().

[noexcept] bool QHash::isEmpty() const

Renvoie true si le hachage ne contient aucun élément ; sinon, renvoie false.

Voir aussi size().

[noexcept] Key QHash::key(const T &value) const

[noexcept] Key QHash::key(const T &value, const Key &defaultKey) const

Renvoie la première clé associée à value. Si le hachage ne contient aucun élément associé à value, il renvoie defaultKey, ou une clé construite par défaut si ce paramètre n'a pas été fourni.

Cette fonction peut être lente(temps linéaire), car la structure de données interne de QHash est optimisée pour une recherche rapide par clé, et non par valeur.

[noexcept] QHash<Key, T>::key_iterator QHash::keyBegin() const

Renvoie un itérateur constant de style STL pointant sur la première clé du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyEnd().

[noexcept] QHash<Key, T>::key_iterator QHash::keyEnd() const

Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après la dernière clé du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyBegin().

QHash<Key, T>::key_value_iterator QHash::keyValueBegin()

Renvoie un itérateur de style STL pointant sur la première entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyValueEnd().

[noexcept] QHash<Key, T>::const_key_value_iterator QHash::keyValueBegin() const

Renvoie un itérateur constant de style STL pointant sur la première entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyValueEnd().

QHash<Key, T>::key_value_iterator QHash::keyValueEnd()

Renvoie un itérateur de style STL pointant vers l'entrée imaginaire située après la dernière entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyValueBegin().

[noexcept] QHash<Key, T>::const_key_value_iterator QHash::keyValueEnd() const

Renvoie un itérateur constant de style STL pointant vers l'entrée imaginaire située après la dernière entrée du hachage.

Attention : Les itérateurs/références retournés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi keyValueBegin().

QList<Key> QHash::keys() const

Renvoie une liste contenant toutes les clés du hachage, dans un ordre arbitraire.

L'ordre est garanti être le même que celui utilisé par values().

Cette fonction crée une nouvelle liste en temps linéaire. L'utilisation du temps et de la mémoire que cela implique peut être évitée en itérant de keyBegin() à keyEnd().

Voir aussi values() et key().

QList<Key> QHash::keys(const T &value) const

Renvoie une liste contenant toutes les clés associées à la valeur value, dans un ordre arbitraire.

Cette fonction peut être lente(temps linéaire), car la structure de données interne de QHash est optimisée pour une recherche rapide par clé et non par valeur.

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

[noexcept] float QHash::load_factor() const

Renvoie le facteur de charge actuel de la table de hachage interne de QHash. C'est la même chose que capacity()/size(). L'implémentation utilisée vise à maintenir le facteur de charge entre 0,25 et 0,5. Cela permet d'éviter un trop grand nombre de collisions dans la table de hachage, ce qui dégraderait les performances.

Même avec un faible facteur de charge, l'implémentation de la table de hachage a une très faible surcharge de mémoire.

Cette méthode n'existe qu'à des fins de diagnostic et vous devriez rarement avoir besoin de l'appeler vous-même.

Voir aussi reserve() et squeeze().

bool QHash::remove(const Key &key)

Supprime l'élément qui possède la clé key du hachage. Retourne true si la clé existe dans le hash et que l'élément a été supprimé, et false sinon.

Voir aussi clear() et take().

[since 6.1] template <typename Predicate> qsizetype QHash::removeIf(Predicate pred)

Supprime du hachage tous les éléments pour lesquels le prédicat pred renvoie la valeur "true".

La fonction prend en charge les prédicats qui prennent soit un argument de type QHash<Key, T>::iterator, soit un argument de type std::pair<const Key &, T &>.

Elle renvoie le nombre d'éléments supprimés, le cas échéant.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi clear() et take().

void QHash::reserve(qsizetype size)

Assure que la table de hachage interne de QHash dispose de l'espace nécessaire pour stocker au moins size éléments sans avoir à agrandir la table de hachage.

Cela implique que la table de hachage contienne au moins 2 * size buckets pour garantir de bonnes performances

Cette fonction est utile pour le code qui doit construire une grande table de hachage et qui veut éviter les réallocations répétées. Par exemple :

QHash<QString, int> hash;
hash.reserve(20000);
for (int i = 0; i < 20000; ++i)
    hash.insert(keys[i], values[i]);

Idéalement, size devrait être le nombre maximum d'éléments attendus dans la table de hachage. QHash choisira alors le plus petit nombre possible de godets qui permettra de stocker les éléments size dans la table sans avoir à augmenter la table de hachage interne. Si size est sous-estimé, le pire qui puisse arriver est que QHash soit un peu plus lent.

En général, vous n'aurez que rarement besoin d'appeler cette fonction. QHash En effet, la table de hachage interne d'un système d'exploitation croît automatiquement pour assurer de bonnes performances sans gaspiller trop de mémoire.

Voir également squeeze() et capacity().

[noexcept] qsizetype QHash::size() const

Renvoie le nombre d'éléments dans le hachage.

Voir aussi isEmpty() et count().

void QHash::squeeze()

Réduit la taille de la table de hachage interne de QHash pour économiser de la mémoire.

Le seul but de cette fonction est de fournir un moyen d'affiner l'utilisation de la mémoire de QHash. En général, vous n'aurez que rarement besoin d'appeler cette fonction.

Voir aussi reserve() et capacity().

[noexcept] void QHash::swap(QHash<Key, T> &other)

Échange ce hachage avec other. Cette opération est très rapide et n'échoue jamais.

T QHash::take(const Key &key)

Retire l'élément avec le key du hachage et renvoie la valeur qui lui est associée.

Si l'élément n'existe pas dans le hachage, la fonction renvoie simplement une valeur construite par défaut.

Si vous n'utilisez pas la valeur de retour, remove() est plus efficace.

Voir également remove().

[since 6.9] template <typename... Args> QHash<Key, T>::TryEmplaceResult QHash::tryEmplace(const Key &key, Args &&... args)

[since 6.9] template <typename... Args> QHash<Key, T>::TryEmplaceResult QHash::tryEmplace(Key &&key, Args &&... args)

[since 6.9] template < typename K, typename... Args, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > QHash<Key, T>::TryEmplaceResult QHash::tryEmplace(K &&key, Args &&... args)

Insère un nouvel élément avec key et une valeur construite à partir de args. Si un élément avec key existe déjà, aucune insertion n'a lieu.

Retourne une instance de TryEmplaceResult, une structure qui contient un iterator vers l'élément nouvellement créé ou vers l'élément préexistant qui a empêché l'insertion, et un booléen, inserted, indiquant si l'insertion a eu lieu.

Par exemple, cela peut être utilisé pour éviter le schéma de comparaison de l'ancienne et de la nouvelle taille ou les doubles recherches. Là où vous auriez pu écrire un code comme :

QHash<int, MyType> hash;
// [...]
int myKey = getKey();
qsizetype oldSize = hash.size();
MyType &elem = hash[myKey];
if (oldSize != hash.size()) // Size changed: new element!
    initialize(elem);
// [use elem...]

vous pouvez écrire à la place :

QHash<int, MyType> hash;
// [...]
int myKey = getKey();
auto result = hash.tryEmplace(myKey);
if (result.inserted) // New element!
    initialize(*result.iterator);
// [use result.iterator...]

Ces fonctions ont été introduites dans Qt 6.9.

Voir aussi emplace(), tryInsert(), et insertOrAssign().

[since 6.9] QHash<Key, T>::TryEmplaceResult QHash::tryInsert(const Key &key, const T &value)

[since 6.9] template < typename K, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > QHash<Key, T>::TryEmplaceResult QHash::tryInsert(K &&key, const T &value)

Insère un nouvel élément avec key et une valeur de value. Si un élément avec key existe déjà, aucune insertion n'a lieu.

Retourne une instance de TryEmplaceResult, une structure qui contient un iterator vers l'élément nouvellement créé, ou vers l'élément préexistant qui a empêché l'insertion, et un booléen, inserted, indiquant si l'insertion a eu lieu.

Ces fonctions ont été introduites dans Qt 6.9.

Voir également insert(), tryEmplace() et insertOrAssign().

[since 6.9] template <typename... Args> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::try_emplace(const Key &key, Args &&... args)

[since 6.9] template <typename... Args> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::try_emplace(Key &&key, Args &&... args)

[since 6.9] template < typename K, typename... Args, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::try_emplace(K &&key, Args &&... args)

Insère un nouvel élément avec key et une valeur construite à partir de args. Si un élément avec key existe déjà, l'insertion n'a pas lieu.

Retourne une paire composée d'un itérateur vers l'élément inséré (ou vers l'élément qui a empêché l'insertion), et d'un bool indiquant si l'insertion a eu lieu.

Ces fonctions sont fournies à des fins de compatibilité avec la bibliothèque standard.

Ces fonctions ont été introduites dans Qt 6.9.

Voir aussi emplace(), tryEmplace(), tryInsert() et insertOrAssign().

[since 6.9] template < typename K, typename... Args, QHash<Key, T>::if_heterogeneously_searchable<K> = true, QHash<Key, T>::if_key_constructible_from<K> = true > QHash<Key, T>::key_value_iterator QHash::try_emplace(QHash<Key, T>::const_iterator hint, K &&key, Args &&... args)

[since 6.9] template <typename... Args> QHash<Key, T>::key_value_iterator QHash::try_emplace(QHash<Key, T>::const_iterator hint, const Key &key, Args &&... args)

[since 6.9] template <typename... Args> QHash<Key, T>::key_value_iterator QHash::try_emplace(QHash<Key, T>::const_iterator hint, Key &&key, Args &&... args)

Insère un nouvel élément avec key et une valeur construite à partir de args. Si un élément avec key existe déjà, l'insertion n'a pas lieu.

Retourne l'itérateur de l'élément inséré, ou l'élément qui a empêché l'insertion.

hint est ignoré.

Ces fonctions sont fournies à des fins de compatibilité avec la bibliothèque standard.

Ces fonctions ont été introduites dans Qt 6.9.

Voir aussi emplace(), tryEmplace(), tryInsert() et insertOrAssign().

[noexcept] T QHash::value(const Key &key) const

[noexcept] T QHash::value(const Key &key, const T &defaultValue) const

Renvoie la valeur associée à key.

Si le hachage ne contient aucun élément avec key, la fonction renvoie defaultValue, ou une valeur construite par défaut si ce paramètre n'a pas été fourni.

QList<T> QHash::values() const

Renvoie une liste contenant toutes les valeurs du hachage, dans un ordre arbitraire.

L'ordre est garanti être le même que celui utilisé par keys().

Cette fonction crée une nouvelle liste en temps linéaire. L'utilisation du temps et de la mémoire que cela implique peut être évitée en itérant de keyValueBegin() à keyValueEnd().

Voir aussi keys() et value().

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

Move-assigne other à cette instance QHash.

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

Affecte other à ce hachage et renvoie une référence à ce hachage.

Remarque : cette fonction est noexcept lorsque std::is_nothrow_destructible<Node>::value est true.

T &QHash::operator[](const Key &key)

Renvoie la valeur associée à key sous la forme d'une référence modifiable.

Si le hachage ne contient aucun élément avec key, la fonction insère une valeur construite par défaut dans le hachage avec key, et renvoie une référence à cette valeur.

Attention : Les itérateurs/références renvoyés doivent être considérés comme invalidés la prochaine fois que vous appellerez une fonction non-const sur le hachage, ou lorsque le hachage sera détruit.

Voir aussi insert() et value().

[noexcept] const T QHash::operator[](const Key &key) const

Identique à value().

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

Non-membres apparentés

[since 6.1] template < typename Key, typename T, typename Predicate > qsizetype erase_if(QHash<Key, T> &hash, Predicate pred)

Supprime du hachage hash tous les éléments pour lesquels le prédicat pred renvoie la valeur "true".

La fonction prend en charge les prédicats qui prennent soit un argument de type QHash<Key, T>::iterator, soit un argument de type std::pair<const Key &, T &>.

Elle renvoie le nombre d'éléments supprimés, le cas échéant.

Cette fonction a été introduite dans Qt 6.1.

[constexpr noexcept, since 6.5] template <typename Enum, std::enable_if_t<std::is_enum_v<Enum>, bool> = true> size_t qHash(Enum key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Note : Avant Qt 6.5, les enums non cadrés s'appuyaient sur les surcharges de cette fonction pour les nombres entiers, en raison de la conversion implicite vers leurs types d'entiers sous-jacents. Pour les enums scopés, vous deviez implémenter une surcharge vous-même. Il s'agit toujours d'une correction rétrocompatible pour rester compatible avec les anciennes versions de Qt.

Cette fonction a été introduite dans Qt 6.5.

[noexcept, since 6.0] size_t qHash(QByteArrayView key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[constexpr noexcept] size_t qHash(uint key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(ulong key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(ushort key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.0] size_t qHash(wchar_t key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[noexcept] size_t qHash(QDate key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] size_t qHash(QLatin1StringView key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept, since 6.0] size_t qHash(QPoint key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[noexcept] size_t qHash(QTime key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.9] template <typename T, std::enable_if_t<std::is_same_v<T, bool>, bool>> size_t qHash(T key, size_t seed)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Note : Il s'agit de qHash(bool), contraint d'accepter uniquement des arguments de type bool, et non des arguments de types qui se convertissent simplement en bool.

Note : Dans les versions de Qt antérieures à la 6.9, cette surcharge était involontairement fournie par une fonction modèle non documentée de l'adaptateur qHash de 1 à 2 arguments, avec un comportement identique.

Cette fonction a été introduite dans Qt 6.9.

[constexpr noexcept] size_t qHash(char key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.0] size_t qHash(char16_t key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[constexpr noexcept, since 6.0] size_t qHash(char32_t key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[constexpr noexcept, since 6.0] size_t qHash(char8_t key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[noexcept] size_t qHash(const QBitArray &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] size_t qHash(const QByteArray &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(const QChar key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

size_t qHash(const QDateTime &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept(...)] template <typename Key, typename T> size_t qHash(const QHash<Key, T> &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Les types Key et T doivent être pris en charge par qHash().

Remarque : cette fonction est noexcept lorsque noexcept(qHash(std::declval<Key&>())) && noexcept(qHash(std::declval<T&>())) est true.

[noexcept(...)] template <typename T> size_t qHash(const QSet<T> &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Le type T doit être pris en charge par qHash().

La valeur de hachage est indépendante de l'ordre des éléments dans key, c'est-à-dire que les ensembles qui contiennent les mêmes éléments ont la même valeur de hachage.

Remarque : cette fonction est noexcept lorsque noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)) est true.

[noexcept] size_t qHash(const QString &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[since 6.0] size_t qHash(const QTypeRevision &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[noexcept] size_t qHash(const QUrl &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

size_t qHash(const QVersionNumber &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] template <typename T> size_t qHash(const T *key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept(...)] template <typename T1, typename T2> size_t qHash(const std::pair<T1, T2> &key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Les types T1 et T2 doivent être pris en charge par qHash().

Remarque : cette fonction est noexcept lorsque QHashPrivate::noexceptPairHash<T1, T2>() est true.

[noexcept] size_t qHash(double key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] size_t qHash(float key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(int key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(long key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] size_t qHash(long double key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.8] size_t qHash(qint128 key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Remarque : cette fonction n'est disponible que sur les plates-formes qui prennent en charge un type d'entier natif de 128 bits.

Cette fonction a été introduite dans Qt 6.8.

[constexpr noexcept] size_t qHash(qint64 key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.8] size_t qHash(quint128 key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Remarque : cette fonction n'est disponible que sur les plates-formes qui prennent en charge un type d'entier natif de 128 bits.

Cette fonction a été introduite dans Qt 6.8.

[constexpr noexcept] size_t qHash(quint64 key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(short key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept] size_t qHash(signed char key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[constexpr noexcept, since 6.0] size_t qHash(std::nullptr_t key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

Cette fonction a été introduite dans Qt 6.0.

[constexpr noexcept] size_t qHash(uchar key, size_t seed = 0)

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

[noexcept] size_t qHashBits(const void *p, size_t len, size_t seed = 0)

Renvoie la valeur de hachage du bloc de mémoire de taille len indiqué par p, en utilisant seed comme base de calcul.

Utilisez cette fonction uniquement pour implémenter qHash() pour vos propres types personnalisés. Par exemple, voici comment vous pourriez implémenter une surcharge qHash() pour std::vector<int> :

inline size_t qHash(const std::vector<int> &key, size_t seed = 0)
{
    if (key.empty())
        return seed;
    else
        return qHashBits(&key.front(), key.size() * sizeof(int), seed);
}

Cette surcharge tire parti du fait que std::vector présente ses données de manière contiguë. Si ce n'est pas le cas, ou si le type contenu a un remplissage, vous devez utiliser qHashRange() à la place.

Il convient de répéter que l'implémentation de qHashBits() - comme les surcharges qHash() offertes par Qt XML - peut changer à tout moment. Vous ne devez pas vous fier au fait que qHashBits() donnera les mêmes résultats (pour les mêmes entrées) dans les différentes versions de Qt.

Voir aussi qHashRange() et qHashRangeCommutative().

[constexpr noexcept(...), since 6.0] template <typename... T> size_t qHashMulti(size_t seed, const T &... args)

Renvoie la valeur de hachage de args, en utilisant seed pour amorcer le calcul, en appliquant successivement qHash() à chaque élément et en combinant les valeurs de hachage en une seule.

Notez que l'ordre des arguments est important. Si l'ordre n'a pas d'importance, utilisez plutôt qHashMultiCommutative(). Si vous hachurez de la mémoire brute, utilisez qHashBits() ; si vous hachurez une plage, utilisez qHashRange().

Cette fonction est fournie pour faciliter l'implémentation de qHash() pour vos propres types personnalisés. Par exemple, voici comment vous pourriez implémenter une surcharge qHash() pour une classe Employee:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    QString name() const { return myName; }
    QDate dateOfBirth() const { return myDateOfBirth; }
    //...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator==(const Employee &e1, const Employee &e2)
{
    return e1.name() == e2.name()
           && e1.dateOfBirth() == e2.dateOfBirth();
}

inline size_t qHash(const Employee &key, size_t seed)
{
    return qHashMulti(seed, key.name(), key.dateOfBirth());
}

#endif // EMPLOYEE_H

Cette fonction a été introduite dans Qt 6.0.

Note : Cette fonction est noexcept lorsque std::conjunction_v<QtPrivate::QNothrowHashable<T>...> est true.

Voir aussi qHashMultiCommutative et qHashRange.

[constexpr noexcept(...), since 6.0] template <typename... T> size_t qHashMultiCommutative(size_t seed, const T &... args)

Renvoie la valeur de hachage de args, en utilisant seed pour amorcer le calcul, en appliquant successivement qHash() à chaque élément et en combinant les valeurs de hachage en une seule.

L'ordre des arguments n'a pas d'importance. Si l'ordre a de l'importance, utilisez qHashMulti() à la place, car cela peut produire un hachage de meilleure qualité. Si vous hachez de la mémoire brute, utilisez qHashBits() ; si vous hachez une plage, utilisez qHashRange().

Cette fonction est fournie pour faciliter l'implémentation de qHash() pour vos propres types personnalisés.

Cette fonction a été introduite dans Qt 6.0.

Note : Cette fonction est noexcept lorsque std::conjunction_v<QtPrivate::QNothrowHashable<T>...> est true.

Voir aussi qHashMulti et qHashRange.

[noexcept(...)] template <typename InputIterator> size_t qHashRange(InputIterator first, InputIterator last, size_t seed = 0)

Renvoie la valeur de hachage pour l'intervalle [first,last), en utilisant seed pour amorcer le calcul, en appliquant successivement qHash() à chaque élément et en combinant les valeurs de hachage en une seule.

La valeur de retour de cette fonction dépend de l'ordre des éléments dans la plage. Cela signifie que

{0, 1, 2}

et

{1, 2, 0}

ont des valeurs différentes. Si l'ordre n'a pas d'importance, par exemple pour les tables de hachage, utilisez plutôt qHashRangeCommutative(). Si vous hachurez de la mémoire brute, utilisez qHashBits().

Utilisez cette fonction uniquement pour implémenter qHash() pour vos propres types personnalisés. Par exemple, voici comment vous pourriez implémenter une surcharge qHash() pour std::vector<int> :

inline size_t qHash(const std::vector<int> &key, size_t seed = 0)
{
    return qHashRange(key.begin(), key.end(), seed);
}

Il convient de répéter que l'implémentation de qHashRange() - comme les surcharges qHash() offertes par Qt XML - peut changer à tout moment. Vous ne devez pas vous fier au fait que qHashRange() donnera les mêmes résultats (pour les mêmes entrées) à travers différentes versions de Qt, même si qHash() pour le type d'élément le ferait.

Remarque : cette fonction est noexcept lorsque noexcept(qHash(*first, 0)) est true.

Voir aussi qHashBits() et qHashRangeCommutative().

[noexcept(...)] template <typename InputIterator> size_t qHashRangeCommutative(InputIterator first, InputIterator last, size_t seed = 0)

Renvoie la valeur de hachage pour l'intervalle [first,last), en utilisant seed pour amorcer le calcul, en appliquant successivement qHash() à chaque élément et en combinant les valeurs de hachage en une seule.

La valeur de retour de cette fonction ne dépend pas de l'ordre des éléments dans la plage. Cela signifie que

{0, 1, 2}

et

{1, 2, 0}

ont les mêmes valeurs. Si l'ordre est important, par exemple pour les vecteurs et les tableaux, utilisez plutôt qHashRange(). Si vous hachurez de la mémoire brute, utilisez qHashBits().

Utilisez cette fonction uniquement pour implémenter qHash() pour vos propres types personnalisés. Par exemple, voici comment vous pourriez implémenter une surcharge qHash() pour std::unordered_set<int> :

inline size_t qHash(const std::unordered_set<int> &key, size_t seed = 0)
{
    return qHashRangeCommutative(key.begin(), key.end(), seed);
}

Il convient de répéter que l'implémentation de qHashRangeCommutative() - comme les surcharges qHash() offertes par Qt XML - peut changer à tout moment. Vous ne devez pas vous fier au fait que qHashRangeCommutative() donnera les mêmes résultats (pour les mêmes entrées) dans les différentes versions de Qt, même si qHash() pour le type d'élément le ferait.

Remarque : cette fonction est noexcept lorsque noexcept(qHash(*first, 0)) est true.

Voir aussi qHashBits() et qHashRange().

[noexcept] bool operator!=(const QHash<Key, T> &lhs, const QHash<Key, T> &rhs)

Renvoie true si le hachage lhs n'est pas égal au hachage rhs; sinon, renvoie false.

Deux hachages sont considérés comme égaux s'ils contiennent les mêmes paires (clé, valeur).

Cette fonction nécessite le type de valeur pour implémenter operator==().

Voir aussi operator==().

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QHash<Key, T> &hash)

Écrit le hachage hash dans le flux out.

Cette fonction nécessite que les types clé et valeur soient implémentés operator<<().

Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).

[noexcept] bool operator==(const QHash<Key, T> &lhs, const QHash<Key, T> &rhs)

Renvoie true si le hachage lhs est égal au hachage rhs; sinon, renvoie false.

Deux hachages sont considérés comme égaux s'ils contiennent les mêmes paires (clé, valeur).

Cette fonction nécessite le type de valeur pour implémenter operator==().

Voir aussi operator!=().

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QHash<Key, T> &hash)

Lit un hachage du flux in dans hash.

Cette fonction nécessite les types clé et valeur pour implémenter operator>>().

Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).

Documentation sur les macros

[since 6.11] QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD

La définition de cette macro désactive la prise en charge des surcharges de qHash qui ne prennent qu'un seul argument ; en d'autres termes, les surcharges de qHash qui n'acceptent pas également une graine. La prise en charge des surcharges à un seul argument de qHash est obsolète et sera supprimée dans Qt 7.

Cette macro a été introduite dans Qt 6.11.

Voir aussi qHash.

© 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.