Auf dieser Seite

QHash Class

template <typename Key, typename T> class QHash

Die Klasse „QHash“ ist eine Template-Klasse, die ein auf einer Hash-Tabelle basierendes Wörterbuch bereitstellt. Mehr...

Header: #include <QHash>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

QHash-Vergleiche

KategorieVergleichbare Typen
GleichheitQHash

Öffentliche Typen

Öffentliche Funktionen

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)
size_t qHash(const QStringRef&key, size_t seed = 0)
size_t qHash(const QMqttTopicFilter&filter, size_t seed = 0)
size_t qHash(const QSslKeyingMaterial&key)
size_t qHash(const QGeoCoordinate&coordinate, size_t seed = 0)
(since 6.0) size_t qHash(QByteArrayView key, size_t seed = 0)
size_t qHash(const QMqttTopicName&name, size_t seed = 0)
size_t qHash(QSslEllipticCurve key, size_t seed = 0)
size_t qHash(uchar key, size_t seed = 0)
size_t qHash(uint Schlüssel, size_t Startwert = 0)
size_t qHash(ulong key, size_t seed = 0)
size_t qHash(ushort key, size_t seed = 0)
(since 6.0) size_t qHash(wchar_t key, size_t seed = 0)
size_t qHash(QDate key, size_t seed = 0)
size_t qHash(const QOcspResponse&key, size_t seed = 0)
size_t qHash(QLatin1StringView key, size_t seed = 0)
size_t qHash(const QSslCertificate&key, size_t seed = 0)
(since 6.0) size_t qHash(QPoint key, size_t seed = 0)
size_t qHash(const QSslError&key, size_t seed = 0)
size_t qHash(QTime key, size_t seed = 0)
size_t qHash(const QSslKeyingMaterial&key, size_t seed)
(since 6.9) size_t qHash(T key, size_t seed)
size_t qHash(char key, size_t seed = 0)
(since 6.0) size_t qHash(char16_t Schlüssel, size_t Startwert = 0)
(since 6.0) size_t qHash(char32_t Schlüssel, size_t Startwert = 0)
(since 6.0) size_t qHash(char8_t key, size_t seed = 0)
size_t qHash(const QBitArray&key, size_t seed = 0)
size_t qHash(const QByteArray&key, size_t seed = 0)
size_t qHash(const QChar key, size_t seed = 0)
size_t qHash(const QDateTime&key, size_t seed = 0)
size_t qHash(const QHash<Key, T>&key, size_t seed = 0)
size_t qHash(const QSet<T>&key, size_t seed = 0)
size_t qHash(const QString&key, size_t seed = 0)
(since 6.0) size_t qHash(const QTypeRevision&key, size_t seed = 0)
size_t qHash(const QUrl&key, size_t seed = 0)
size_t qHash(const QVersionNumber&key, size_t seed = 0)
size_t qHash(const T*key, size_t seed = 0)
(since 6.12) size_t qHash(const std::optional<T>&key, size_t seed = 0)
size_t qHash(const std::pair<T1, T2>&key, size_t seed = 0)
size_t qHash(double key, size_t seed = 0)
size_t qHash(float key, size_t seed = 0)
size_t qHash(int key, size_t seed = 0)
size_t qHash(long key, size_t seed = 0)
size_t qHash(long double key, size_t seed = 0)
(since 6.8) size_t qHash(qint128 key, size_t seed = 0)
size_t qHash(qint64 key, size_t seed = 0)
(since 6.8) size_t qHash(quint128 key, size_t seed = 0)
size_t qHash(quint64 key, size_t seed = 0)
size_t qHash(short key, size_t seed = 0)
size_t qHash(signed char key, size_t seed = 0)
(since 6.0) size_t qHash(std::nullptr_t key, size_t seed = 0)
size_t qHashBits(const void*p, size_t len, size_t seed = 0)
(since 6.0) size_t qHashMulti(size_t seed, const T &... args)
(since 6.0) size_t qHashMultiCommutative(size_t seed, const T &... args)
size_t qHashRange(InputIterator first, InputIterator last, size_t seed = 0)
size_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)

Makros

Ausführliche Beschreibung

QHash<KEY, T> ist eine der generischen Containerklassen von Qt, wobei „ Key “ der Typ für Suchschlüssel und „ T “ der Typ für die zugeordneten Werte ist. Sie speichert (Schlüssel, Wert)-Paare und ermöglicht eine sehr schnelle Suche nach dem zu einem Schlüssel gehörenden Wert.

QHash bietet eine sehr ähnliche Funktionalität wie ` QMap`. Die Unterschiede sind:

  • QHash ermöglicht schnellere Abfragen als „ QMap “. (Einzelheiten finden Sie unter „Algorithmische Komplexität “.)
  • Beim Durchlaufen eines „ QMap “ sind die Elemente immer nach Schlüssel sortiert. Bei QHash sind die Elemente beliebig angeordnet.
  • Der Schlüsseltyp eines ` QMap ` muss den Operator `<()` bereitstellen. Der Schlüsseltyp eines `QHash` muss den Operator `==()` sowie eine globale Hash-Funktion namens ` qHash()` bereitstellen (siehe qHash).

Hier ist ein Beispiel für einen QHash mit Schlüsseln vom Typ „ QString “ und Werten vom Typ „ int “:

QHash<QString, int> hash;

Um ein (Schlüssel, Wert)-Paar in den Hash einzufügen, können Sie den Operator []() verwenden:

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

Dadurch werden die folgenden drei (Schlüssel, Wert)-Paare in den QHash eingefügt: („one“, 1), („three“, 3) und („seven“, 7). Eine weitere Möglichkeit, Elemente in den Hash einzufügen, ist die Verwendung von ` insert()`:

hash.insert("twelve", 12);

Um einen Wert abzufragen, verwenden Sie den Operator []() oder value():

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

Wenn im Hash kein Eintrag mit dem angegebenen Schlüssel vorhanden ist, geben diese Funktionen einen standardmäßig konstruierten Wert zurück.

Wenn Sie prüfen möchten, ob der Hash einen bestimmten Schlüssel enthält, verwenden Sie ` contains()`:

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

Es gibt außerdem eine Überladung von ` value()`, die ihr zweites Argument als Standardwert verwendet, falls kein Eintrag mit dem angegebenen Schlüssel vorhanden ist:

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

Generell empfehlen wir, für die Suche nach einem Schlüssel in einem Hash eher ` contains()` und ` value()` anstelle von `operator[]()` zu verwenden. Der Grund dafür ist, dass `operator[]()` stillschweigend ein Element in den Hash einfügt, wenn kein Element mit demselben Schlüssel vorhanden ist (es sei denn, der Hash ist `const`). Das folgende Code-Schnipsel erstellt beispielsweise 1000 Elemente im Speicher:

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

Um dieses Problem zu vermeiden, ersetzen Sie im obigen Code hash[i] durch hash.value(i).

Intern verwendet QHash eine Hash-Tabelle, um Suchvorgänge durchzuführen. Diese Hash-Tabelle wird automatisch vergrößert, um schnelle Suchvorgänge zu ermöglichen, ohne zu viel Speicher zu verschwenden. Sie können die Größe der Hash-Tabelle weiterhin steuern, indem Sie ` reserve()` aufrufen, wenn Sie bereits ungefähr wissen, wie viele Elemente der QHash enthalten wird; dies ist jedoch für eine gute Leistung nicht erforderlich. Sie können außerdem capacity() aufrufen, um die Größe der Hash-Tabelle abzurufen.

QHash wird nicht automatisch verkleinert, wenn Elemente aus der Tabelle entfernt werden. Um den Speicherbedarf der Hash-Tabelle zu minimieren, rufen Sie ` squeeze()` auf.

Um alle in einem QHash gespeicherten (Schlüssel, Wert)-Paare zu durchlaufen, verwenden Sie ` asKeyValueRange()`:

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

Diese Funktion gibt ein Bereichsobjekt zurück, das mit strukturierten Bindungen verwendet werden kann. Zur manuellen Steuerung des Iterators können Sie auch herkömmliche Iteratoren im STL-Stil verwenden (QHash::const_iterator und QHash::iterator):

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

Um Werte zu ändern, verwenden Sie Iteratoren:

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

QHash bietet aus Kompatibilitätsgründen auch Iteratoren im Java-Stil an (QHashIterator und QMutableHashIterator).

QHash ist ungeordnet, daher kann nicht davon ausgegangen werden, dass die Reihenfolge eines Iterators vorhersehbar ist. Wenn eine Sortierung nach Schlüssel erforderlich ist, verwenden Sie einen QMap.

Ein QHash erlaubt nur einen Wert pro Schlüssel. Wenn Sie ` insert()` mit einem Schlüssel aufrufen, der bereits im QHash vorhanden ist, wird der vorherige Wert gelöscht. Zum Beispiel:

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

Wenn Sie mehrere Einträge für denselben Schlüssel in der Hash-Tabelle speichern müssen, verwenden Sie ` QMultiHash`.

Wenn Sie nur die Werte aus einem Hash extrahieren möchten (nicht die Schlüssel), können Sie auch ein bereichsbasiertes „for“-Statement verwenden:

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

Elemente können auf verschiedene Weise aus dem Hash entfernt werden. Eine Möglichkeit besteht darin, ` remove()` aufzurufen; dadurch werden alle Elemente mit dem angegebenen Schlüssel entfernt. Eine weitere Möglichkeit ist die Verwendung von ` QMutableHashIterator::remove()`. Darüber hinaus können Sie den gesamten Hash mit ` clear()` löschen.

Die Datentypen für Schlüssel und Werte von `QHash` müssen zuweisbare Datentypen sein. Sie können beispielsweise keinen ` QWidget ` als Wert speichern; stattdessen müssen Sie einen ` QWidget *` speichern.

Die Hash-Funktion

Der Schlüsseltyp eines QHash unterliegt neben der Anforderung, ein zuweisbarer Datentyp zu sein, weiteren Anforderungen: Er muss den Operator ==() bereitstellen, und es muss eine Hash-Funktion vorhanden sein, die für ein Argument vom Typ des Schlüssels einen Hash-Wert zurückgibt.

Die Hash-Funktion berechnet anhand eines Schlüssels einen numerischen Wert. Sie kann jeden denkbaren Algorithmus verwenden, solange sie bei gleichem Argument stets denselben Wert zurückgibt. Mit anderen Worten: Wenn „ e1 == e2 “ gilt, dann muss auch „ hash(e1) == hash(e2) “ gelten. Um jedoch eine gute Leistung zu erzielen, sollte die Hash-Funktion versuchen, für unterschiedliche Schlüssel so weit wie möglich unterschiedliche Hash-Werte zurückzugeben.

Eine Hash-Funktion für einen Schlüsseltyp ` K ` kann auf zwei verschiedene Arten bereitgestellt werden.

Die erste Möglichkeit besteht darin, eine Überladung von ` qHash() ` im Namensraum von ` K` zu definieren. Die Funktion ` qHash() ` muss eine der folgenden Signaturen aufweisen:

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

Die Überladungen mit zwei Argumenten nehmen eine vorzeichenlose Ganzzahl entgegen, die als Startwert für die Berechnung der Hash-Funktion dienen soll. Dieser Startwert wird von QHash bereitgestellt, um eine Familie von algorithmic complexity attacks zu verhindern.

Hinweis: In Qt 6 ist es möglich, eine Überladung von ` qHash() ` zu definieren, die nur ein Argument akzeptiert; die Unterstützung hierfür ist jedoch veraltet. Ab Qt 7 ist die Verwendung einer Überladung mit zwei Argumenten obligatorisch. Sind für einen Schlüsseltyp sowohl eine Überladung mit einem als auch eine mit zwei Argumenten definiert, wird letztere von QHash verwendet (beachten Sie, dass Sie einfach eine Version mit zwei Argumenten definieren und einen Standardwert für den Seed-Parameter verwenden können). In Qt 6 ist es möglich, die Unterstützung für die Überladung von ` qHash ` mit einem einzigen Argument zu deaktivieren, indem das Makro ` QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD ` definiert wird.

Die zweite Möglichkeit, eine Hash-Funktion bereitzustellen, besteht darin, die Klasse „ std::hash “ für den Schlüsseltyp „ K “ zu spezialisieren und einen geeigneten Funktionsaufrufoperator dafür bereitzustellen:

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

Das „seed“-Argument hat dieselbe Bedeutung wie bei ` qHash()` und kann weggelassen werden.

Diese zweite Möglichkeit ermöglicht die Wiederverwendung derselben Hash-Funktion zwischen `QHash` und den ungeordneten assoziativen Containern der C++-Standardbibliothek. Wenn für einen Typ sowohl eine Überladung von ` qHash() ` als auch eine Spezialisierung von ` std::hash ` bereitgestellt werden, wird die Überladung von ` qHash() ` bevorzugt.

Hier ist eine unvollständige Liste der C++- und Qt-Typen, die als Schlüssel in einem QHash dienen können: beliebige Integer-Typen (char, unsigned long usw.), beliebige Zeigertypen, ` QChar`, ` QString` und ` QByteArray`. Für alle diese Typen definiert der Header ` <QHash> ` eine Funktion ` qHash()`, die einen geeigneten Hash-Wert berechnet. Viele andere Qt-Klassen deklarieren ebenfalls eine Überladung von ` qHash ` für ihren Typ; bitte beachten Sie die Dokumentation der jeweiligen Klasse.

Wenn Sie andere Typen als Schlüssel verwenden möchten, stellen Sie sicher, dass Sie den Operator ==() und eine Hash-Implementierung bereitstellen.

Die Komfort qHashMulti()-Funktion kann verwendet werden, um ` qHash()` für einen benutzerdefinierten Typ zu implementieren, bei dem man in der Regel einen Hash-Wert aus mehreren Feldern erzeugen möchte:

Beispiel:

#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

Im obigen Beispiel haben wir uns auf die Qt-eigene Implementierung von ` qHash()` für ` QString ` und ` QDate ` verlassen, um einen Hash-Wert für den Namen bzw. das Geburtsdatum des Mitarbeiters zu erhalten.

Beachten Sie, dass sich die von Qt angebotenen Überladungen von ` qHash()` jederzeit ändern können. Sie dürfen sich nicht darauf verlassen, dass ` qHash()` über verschiedene Qt-Versionen hinweg (bei gleichen Eingaben) dieselben Ergebnisse liefert.

Angriffe aufgrund algorithmischer Komplexität

Alle Hash-Tabellen sind anfällig für eine bestimmte Klasse von Denial-of-Service-Angriffen, bei denen der Angreifer sorgfältig eine Reihe verschiedener Schlüssel vorberechnet, die in denselben Bucket einer Hash-Tabelle gehasht werden (oder sogar genau denselben Hash-Wert haben). Der Angriff zielt darauf ab, das algorithmische Verhalten im schlimmsten Fall (O(n) statt amortisiert O(1), siehe „Algorithmische Komplexität“ für Details) zu erzielen, wenn die Daten in die Tabelle eingespeist werden.

Um dieses Worst-Case-Verhalten zu vermeiden, kann die Berechnung des Hash-Werts durch ` qHash()` mit einem zufälligen Startwert „gesalzen“ werden, wodurch die Wirkung des Angriffs zunichte gemacht wird. Dieser Startwert wird von QHash einmal pro Prozess automatisch generiert und anschließend von QHash als zweites Argument an die zweiparametrige Überladung der Funktion ` qHash()` übergeben.

Diese Randomisierung von QHash ist standardmäßig aktiviert. Auch wenn sich Programme niemals auf eine bestimmte QHash-Reihenfolge verlassen sollten, kann es Situationen geben, in denen Sie vorübergehend deterministisches Verhalten benötigen, beispielsweise für die Fehlersuche oder Regressionstests. Um die Randomisierung zu deaktivieren, setzen Sie die Umgebungsvariable ` QT_HASH_SEED ` auf den Wert 0. Alternativ können Sie die Funktion ` QHashSeed::setDeterministicGlobalSeed()` aufrufen.

Siehe auch „ QHashIterator“ , „ QMutableHashIterator “, „ QMap “ und „ QSet “.

Dokumentation zu Mitgliedstypen

QHash::ConstIterator

Synonym im Qt-Stil für „ QHash::const_iterator “.

QHash::Iterator

Synonym im Qt-Stil für „ QHash::iterator “.

QHash::const_key_value_iterator

Der Typedef „QHash::const_key_value_iterator“ stellt einen konstanten Iterator im STL-Stil für „ QHash “ bereit.

`QHash::const_key_value_iterator` entspricht im Wesentlichen ` QHash::const_iterator `, mit dem Unterschied, dass der Operator `*()` anstelle eines Werts ein Schlüssel-Wert-Paar zurückgibt.

Siehe auch ` QKeyValueIterator`.

[alias] QHash::difference_type

Typedef für ptrdiff_t. Wird aus Gründen der STL-Kompatibilität bereitgestellt.

[alias] QHash::key_type

Typedef für „Key“. Wird aus Gründen der STL-Kompatibilität bereitgestellt.

QHash::key_value_iterator

Der Typdefinitionsbezeichner „QHash::key_value_iterator“ stellt einen Iterator im STL-Stil für „ QHash “ bereit.

`QHash::key_value_iterator` entspricht im Wesentlichen ` QHash::iterator `, mit dem Unterschied, dass der Operator `*()` ein Schlüssel-Wert-Paar anstelle eines einzelnen Werts zurückgibt.

Siehe auch „ QKeyValueIterator “.

[alias] QHash::mapped_type

Typedef für T. Wird aus Gründen der STL-Kompatibilität bereitgestellt.

[alias] QHash::size_type

Typedef für int. Wird aus Gründen der STL-Kompatibilität bereitgestellt.

Dokumentation zu den Member-Funktionen

[noexcept default] QHash::QHash()

Erstellt ein leeres Hash-Objekt.

Siehe auch ` clear()`.

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

Erstellt ein Hash-Objekt mit einer Kopie jedes Elements aus der Initialisierungsliste „ list “.

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

Erstellt ein Hash-Objekt mit einer Kopie jedes Elements im Iteratorbereich [begin, end). Entweder müssen die Elemente, über die der Bereich iteriert, Objekte mit den Datenelementen first und second sein (wie z. B. std::pair), die jeweils in Key bzw. T konvertierbar sind; oder die Iteratoren müssen die Mitgliedsfunktionen key() und value() besitzen, die jeweils einen Schlüssel zurückgeben, der in Key konvertierbar ist, sowie einen Wert, der in T konvertierbar ist.

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

Erstellt eine Kopie von ` other`.

Dieser Vorgang erfolgt in konstanter Zeit, da QHash implizit gemeinsam genutzt wird. Dadurch ist die Rückgabe eines QHash aus einer Funktion sehr schnell. Wird eine gemeinsam genutzte Instanz geändert, wird sie kopiert (Copy-on-Write), was lineare Zeit in Anspruch nimmt.

Siehe auch ` operator=()`.

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

Erstellt eine QHash-Instanz und sorgt dafür, dass diese auf dasselbe Objekt verweist, auf das zuvor „ other “ verwiesen hat.

QHash::~QHash()

Löscht den Hash. Verweise auf die Werte im Hash sowie alle Iteratoren dieses Hashs werden ungültig.

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

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

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

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

Gibt ein Bereichsobjekt zurück, das die Iteration über diesen Hash als Schlüssel-Wert-Paare ermöglicht. Dieses Bereichsobjekt kann beispielsweise in einer bereichsbasierten for-Schleife in Kombination mit einer strukturierten Bindungsdeklaration verwendet werden:

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
}

Beachten Sie, dass sowohl der Schlüssel als auch der Wert, die auf diese Weise abgerufen werden, Referenzen auf die entsprechenden Elemente im Hash sind. Insbesondere führt eine Änderung des Werts zu einer Änderung des Hashs selbst.

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Diese Funktionen wurden in Qt 6.4 eingeführt.

Siehe auch QKeyValueIterator.

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

Gibt einen Iterator im STL-Stil zurück, der auf das erste Element im Hash verweist.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` constBegin()` und ` end()`.

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

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Dies ist eine überladene Funktion.

[noexcept] qsizetype QHash::capacity() const

Gibt die Anzahl der Buckets in der internen Hash-Tabelle von „ QHash “ zurück.

Der einzige Zweck dieser Funktion besteht darin, eine Möglichkeit zur Feinabstimmung der Speichernutzung von „ QHash “ bereitzustellen. Im Allgemeinen werden Sie diese Funktion so gut wie nie aufrufen müssen. Wenn Sie wissen möchten, wie viele Elemente sich im Hash befinden, rufen Sie „ size()“ auf.

Siehe auch „ reserve()“ und „ squeeze()“.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf das erste Element im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` begin()` und ` cend()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf das imaginäre Element nach dem letzten Element im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch cbegin() und end().

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

Entfernt alle Elemente aus dem Hash und gibt den gesamten von ihm belegten Speicher frei.

Hinweis: Diese Funktion ist „noexcept“, wenn „ std::is_nothrow_destructible<Node>::value “ auf „ true “ gesetzt ist.

Siehe auch ` remove()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf das erste Element im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch „ begin()“ und „ constEnd()“.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf das imaginäre Element nach dem letzten Element im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch constBegin() und end().

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

Gibt einen Iterator zurück, der auf das Element mit dem key im Hash verweist.

Enthält das Hash kein Element mit dem key, gibt die Funktion constEnd() zurück.

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch find().

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf den ersten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyValueBegin()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf den imaginären Eintrag nach dem letzten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` constKeyValueBegin()`.

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

Gibt „ true “ zurück, wenn der Hash ein Element mit dem Schlüssel „ key “ enthält; andernfalls wird „ false “ zurückgegeben.

Siehe auch count().

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

Gibt die Anzahl der Elemente zurück, die mit dem ` key` verknüpft sind.

Siehe auch contains().

[noexcept] qsizetype QHash::count() const

Entspricht „ size()“.

Dies ist eine überladene Funktion.

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

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

Fügt ein neues Element in den Container ein. Dieses neue Element wird an Ort und Stelle unter Verwendung von „ args “ als Argumente für seine Erstellung gebildet. Falls das Element bereits im Container vorhanden ist, wird es ersetzt.

Gibt einen Iterator zurück, der auf das neue Element verweist.

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

[noexcept] bool QHash::empty() const

Diese Funktion dient der Kompatibilität mit der STL. Sie entspricht der Funktion „ isEmpty()“ und gibt „true“ zurück, wenn der Hash leer ist; andernfalls wird „ false “ zurückgegeben.

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

Gibt einen Iterator im STL-Stil zurück, der auf das imaginäre Element nach dem letzten Element im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch begin() und constEnd().

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

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Dies ist eine überladene Funktion.

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

Entfernt das (Schlüssel, Wert)-Paar, das dem Iterator „ pos “ zugeordnet ist, aus dem Hash und gibt einen Iterator auf das nächste Element im Hash zurück.

Diese Funktion führt niemals dazu, dass QHash seine interne Datenstruktur neu indiziert. Das bedeutet, dass sie sicher während einer Iteration aufgerufen werden kann und die Reihenfolge der Elemente im Hash nicht beeinflusst. Zum Beispiel:

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;
    }
}

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion auf dem Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch remove(), take() und find().

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

Gibt einen Iterator zurück, der auf das Element im Hash verweist, das die Eigenschaft „ key “ aufweist.

Enthält der Hash kein Element mit dem key, gibt die Funktion end() zurück.

Enthält der Hash mehrere Einträge mit dem Schlüssel „ key “, gibt diese Funktion einen Iterator zurück, der auf den zuletzt eingefügten Wert zeigt. Auf die anderen Werte kann durch Inkrementieren des Iterators zugegriffen werden. Hier ist beispielsweise ein Codeausschnitt, der alle Einträge mit demselben Schlüssel durchläuft:

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;
}

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` value()` und ` values()`.

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

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Dies ist eine überladene Funktion.

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

Fügt alle Elemente des Hashs „ other “ in diesen Hash ein.

Wenn ein Schlüssel in beiden Hashes vorkommt, wird sein Wert durch den in „ other “ gespeicherten Wert ersetzt.

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

Fügt einen neuen Eintrag mit dem key und dem Wert value ein.

Falls bereits ein Eintrag mit dem Schlüssel „ key “ vorhanden ist, wird dessen Wert durch „ value “ ersetzt.

Das Einfügen eines Schlüssel-Wert-Paares mit einem bereits vorhandenen Schlüssel ersetzt den bestehenden Wert.

Gibt einen Iterator zurück, der auf das neue bzw. aktualisierte Element verweist.

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion auf dem Hash aufrufen oder wenn der Hash zerstört wird.

[since 6.11] QHash<Key, T>::iterator QHash::insert(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(const Key &key, T &&value)

Diese Funktionen wurden in Qt 6.11 eingeführt.

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

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

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

Versucht, ein Element mit den Werten „ key “ und „ value “ einzufügen. Falls bereits ein Element mit dem Wert „ key “ vorhanden ist, wird dessen Wert durch „ value “ überschrieben.

Gibt eine Instanz von ` TryEmplaceResult` zurück, eine Struktur, die einen ` iterator ` zum Element sowie einen booleschen Wert ` inserted` enthält, der angibt, ob das Element neu erstellt wurde (`true`) oder bereits existierte (`false`).

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch „ insert()“, „ tryEmplace()“ und „ tryInsert()“.

[since 6.9] template <typename K, typename Value> requires if_heterogeneously_searchable<K> && if_key_constructible_from<K> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::insert_or_assign(K &&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 Value> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::insert_or_assign(const Key &key, Value &&value)

Versucht, ein Element mit den Werten „ key “ und „ value “ einzufügen. Falls bereits ein Element mit dem Wert „ key “ vorhanden ist, wird dessen Wert durch „ value “ überschrieben.

Gibt ein Paar zurück, bestehend aus einem Iterator, der auf das Element verweist, und einem booleschen Wert, der angibt, ob das Element neu erstellt wurde (true) oder bereits existierte (false).

Diese Funktionen werden aus Gründen der Kompatibilität mit der Standardbibliothek bereitgestellt.

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch „ insert()“, „ tryEmplace()“, „ tryInsert()“ und „ insertOrAssign()“.

[since 6.9] template <typename K, typename Value> requires if_heterogeneously_searchable<K> && if_key_constructible_from<K> QHash<Key, T>::key_value_iterator QHash::insert_or_assign(QHash<Key, T>::const_iterator hint, K &&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 Value> QHash<Key, T>::key_value_iterator QHash::insert_or_assign(QHash<Key, T>::const_iterator hint, const Key &key, Value &&value)

Versucht, ein Element mit den Werten ` key ` und ` value` einzufügen. Falls bereits ein Element mit dem Wert ` key ` vorhanden ist, wird dessen Wert mit ` value` überschrieben.

Gibt ein Paar zurück, bestehend aus einem Iterator, der auf das Element verweist, und einem booleschen Wert, der angibt, ob das Element neu erstellt wurde (true) oder bereits zuvor existierte (false).

hint wird ignoriert.

Diese Funktionen werden aus Gründen der Kompatibilität mit der Standardbibliothek bereitgestellt.

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch insert(), tryEmplace() und insertOrAssign().

[noexcept] bool QHash::isEmpty() const

Gibt „ true “ zurück, wenn der Hash keine Elemente enthält; andernfalls wird „false“ zurückgegeben.

Siehe auch ` size()`.

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

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

Gibt den ersten Schlüssel zurück, der value zugeordnet ist. Wenn der Hash keinen Eintrag enthält, der value zugeordnet ist, wird defaultKey zurückgegeben oder ein standardmäßig konstruierter Schlüssel, falls dieser Parameter nicht angegeben wurde.

Diese Funktion kann langsam sein (lineare Laufzeit), da die interne Datenstruktur von ` QHash` für eine schnelle Suche nach Schlüsseln und nicht nach Werten optimiert ist.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf den ersten Schlüssel im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyEnd()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf das imaginäre Element nach dem letzten Schlüssel im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyBegin()`.

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

Gibt einen Iterator im STL-Stil zurück, der auf den ersten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyValueEnd()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf den ersten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyValueEnd()`.

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

Gibt einen Iterator im STL-Stil zurück, der auf den imaginären Eintrag nach dem letzten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyValueBegin()`.

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

Gibt einen konstanten Iterator im STL-Stil zurück, der auf den imaginären Eintrag nach dem letzten Eintrag im Hash zeigt.

Warnung: Diezurückgegebenen Iteratoren/Referenzen gelten als ungültig, sobald Sie das nächste Mal eine nicht-konstante Funktion für den Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` keyValueBegin()`.

QList<Key> QHash::keys() const

Gibt eine Liste zurück, die alle Schlüssel des Hashs in beliebiger Reihenfolge enthält.

Es wird garantiert, dass die Reihenfolge mit der von ` values()` übereinstimmt.

Diese Funktion erstellt eine neue Liste in linearer Zeit. Der damit verbundene Zeit- und Speicherverbrauch lässt sich vermeiden, indem man statt ` keyBegin()` die Funktion ` keyEnd()` aufruft.

Siehe auch values() und key().

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

Gibt eine Liste zurück, die alle Schlüssel enthält, die dem Wert value zugeordnet sind, in beliebiger Reihenfolge.

Diese Funktion kann langsam sein (lineare Laufzeit), da die interne Datenstruktur von ` QHash` für eine schnelle Suche nach Schlüsseln und nicht nach Werten optimiert ist.

Dies ist eine überladene Funktion.

[noexcept] float QHash::load_factor() const

Gibt den aktuellen Auslastungsfaktor der internen Hash-Tabelle des „ QHash “ zurück. Dies entspricht den Funktionen „ capacity()“ bzw. „size()“. Die verwendete Implementierung ist darauf ausgelegt, den Auslastungsfaktor zwischen 0,25 und 0,5 zu halten. Dadurch wird vermieden, dass es zu vielen Kollisionen in der Hash-Tabelle kommt, die die Leistung beeinträchtigen würden.

Selbst bei einem niedrigen Auslastungsfaktor verursacht die Implementierung der Hash-Tabelle nur einen sehr geringen Speicher-Overhead.

Diese Methode dient ausschließlich zu Diagnosezwecken und Sie sollten sie nur selten selbst aufrufen müssen.

Siehe auch reserve() und squeeze().

bool QHash::remove(const Key &key)

Entfernt das Element mit dem Schlüssel „ key “ aus dem Hash. Gibt „true“ zurück, wenn der Schlüssel im Hash vorhanden ist und das Element entfernt wurde; andernfalls „false“.

Siehe auch „ clear()“ und „ take()“.

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

Entfernt alle Elemente aus dem Hash, für die das Prädikat „ pred “ den Wert „true“ zurückgibt.

Die Funktion unterstützt Prädikate, die entweder ein Argument vom Typ „ QHash<Key, T>::iterator “ oder ein Argument vom Typ „ std::pair<const Key &, T &> “ entgegennehmen.

Gibt die Anzahl der entfernten Elemente zurück, sofern vorhanden.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch ` clear()` und ` take()`.

void QHash::reserve(qsizetype size)

Stellt sicher, dass die interne Hash-Tabelle des QHash s genügend Platz hat, um mindestens size Einträge zu speichern, ohne dass die Hash-Tabelle vergrößert werden muss.

Dies bedeutet, dass die Hash-Tabelle mindestens 2 * size Buckets enthält, um eine gute Leistung zu gewährleisten.

Diese Funktion ist nützlich für Code, der einen riesigen Hash aufbauen muss und wiederholte Neuzuweisungen vermeiden möchte. Zum Beispiel:

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

Idealerweise sollte ` size ` die maximal erwartete Anzahl von Elementen im Hash sein. ` QHash ` wählt dann die kleinstmögliche Anzahl von Buckets, die es ermöglicht, ` size ` Elemente in der Tabelle zu speichern, ohne die interne Hash-Tabelle vergrößern zu müssen. Sollte ` size ` zu niedrig angesetzt sein, ist das Schlimmste, was passieren kann, dass der ` QHash ` etwas langsamer wird.

Im Allgemeinen werden Sie diese Funktion so gut wie nie aufrufen müssen. Die interne Hash-Tabelle von QHash vergrößert sich automatisch, um eine gute Leistung zu gewährleisten, ohne zu viel Speicher zu verschwenden.

Siehe auch squeeze() und capacity().

[noexcept] qsizetype QHash::size() const

Gibt die Anzahl der Elemente im Hash zurück.

Siehe auch „ isEmpty()“ und „ count()“.

void QHash::squeeze()

Verringert die Größe der internen Hash-Tabelle von „ QHash “, um Speicherplatz zu sparen.

Der einzige Zweck dieser Funktion besteht darin, eine Möglichkeit zur Feinabstimmung des Speicherverbrauchs von ` QHash` bereitzustellen. Im Allgemeinen werden Sie diese Funktion so gut wie nie aufrufen müssen.

Siehe auch ` reserve()` und ` capacity()`.

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

Tauscht diesen Hash gegen other aus. Dieser Vorgang ist sehr schnell und schlägt niemals fehl.

T QHash::take(const Key &key)

Entfernt das Element mit der key aus dem Hash und gibt den damit verknüpften Wert zurück.

Wenn der Eintrag im Hash nicht vorhanden ist, gibt die Funktion einfach einen standardmäßig konstruierten Wert zurück.

Wenn Sie den Rückgabewert nicht verwenden, ist ` remove()` effizienter.

Siehe auch ` remove()`.

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

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

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

Fügt ein neues Element mit dem „ key “ und einem Wert ein, der aus „ args “ gebildet wird. Wenn bereits ein Element mit „ key “ existiert, findet kein Einfügen statt.

Gibt eine Instanz von ` TryEmplaceResult` zurück, eine Struktur, die einen ` iterator ` zum neu erstellten Element oder zu dem bereits vorhandenen Element, das die Einfügung verhindert hat, sowie einen booleschen Wert ` inserted` enthält, der angibt, ob die Einfügung stattgefunden hat.

Dies kann beispielsweise verwendet werden, um den Vergleich von alter und neuer Größe oder doppelte Nachschläge zu vermeiden. Wo Sie zuvor möglicherweise Code wie den folgenden geschrieben hätten:

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

können Sie stattdessen schreiben:

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

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch emplace(), tryInsert() und insertOrAssign().

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

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

Fügt ein neues Element mit dem key und dem Wert „ value “ ein. Wenn bereits ein Element mit dem key vorhanden ist, erfolgt kein Einfügen.

Gibt eine Instanz von ` TryEmplaceResult` zurück, eine Struktur, die einen ` iterator ` zum neu erstellten Element oder zu dem bereits vorhandenen Element, das das Einfügen verhindert hat, sowie einen booleschen Wert, ` inserted`, enthält, der angibt, ob das Einfügen stattgefunden hat.

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch insert(), tryEmplace() und insertOrAssign().

[since 6.9] template <typename K, typename... Args> requires if_heterogeneously_searchable<K> && if_key_constructible_from<K> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::try_emplace(K &&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... Args> std::pair<QHash<Key, T>::key_value_iterator, bool> QHash::try_emplace(const Key &key, Args &&... args)

Fügt ein neues Element mit dem „ key “ und einem aus „ args “ konstruierten Wert ein. Falls bereits ein Element mit dem „ key “ vorhanden ist, findet kein Einfügen statt.

Gibt ein Paar zurück, bestehend aus einem Iterator auf das eingefügte Element (oder auf das Element, das das Einfügen verhindert hat) und einem bool-Wert, der angibt, ob das Einfügen stattgefunden hat.

Diese Funktionen werden aus Gründen der Kompatibilität mit der Standardbibliothek bereitgestellt.

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch emplace(), tryEmplace(), tryInsert() und insertOrAssign().

[since 6.9] template <typename K, typename... Args> requires if_heterogeneously_searchable<K> && if_key_constructible_from<K> 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, 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, const Key &key, Args &&... args)

Fügt ein neues Element mit dem „ key “ und einem Wert ein, der aus „ args “ gebildet wird. Falls bereits ein Element mit „ key “ vorhanden ist, findet kein Einfügen statt.

Gibt den Iterator des eingefügten Elements zurück oder den des Elements, das das Einfügen verhindert hat.

hint wird ignoriert.

Diese Funktionen werden aus Gründen der Kompatibilität mit der Standardbibliothek bereitgestellt.

Diese Funktionen wurden in Qt 6.9 eingeführt.

Siehe auch emplace(), tryEmplace(), tryInsert() und insertOrAssign().

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

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

Gibt den Wert zurück, der mit dem „ key “ verknüpft ist.

Enthält der Hash keinen Eintrag mit dem Schlüssel „ key “, gibt die Funktion „ defaultValue “ zurück oder einen standardmäßig konstruierten Wert, falls dieser Parameter nicht angegeben wurde.

QList<T> QHash::values() const

Gibt eine Liste zurück, die alle Werte des Hashs in beliebiger Reihenfolge enthält.

Es wird garantiert, dass die Reihenfolge mit der von ` keys()` übereinstimmt.

Diese Funktion erstellt eine neue Liste in linearer Zeit. Der damit verbundene Zeit- und Speicherbedarf lässt sich vermeiden, indem man anstelle von ` keyValueBegin()` die Funktion ` keyValueEnd()` verwendet.

Siehe auch keys() und value().

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

Weist „ other “ dieser „ QHash “-Instanz zu.

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

Weist diesem Hash den Wert „ other “ zu und gibt eine Referenz auf diesen Hash zurück.

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

Gibt den Wert zurück, der mit dem ` key ` verknüpft ist, als bearbeitbare Referenz.

Enthält der Hash kein Element mit dem key, fügt die Funktion einen standardkonstruierten Wert mit dem key in den Hash ein und gibt eine Referenz darauf zurück.

Warnung: Zurückgegebene Iteratoren/Referenzen sollten als ungültig betrachtet werden, sobald Sie das nächste Mal eine nicht-konstante Funktion auf dem Hash aufrufen oder wenn der Hash zerstört wird.

Siehe auch ` insert()` und ` value()`.

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

Entspricht ` value()`.

Dies ist eine überladene Funktion.

Verwandte Nicht-Mitglieder

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

Entfernt alle Elemente aus dem Hash „ hash “, für die das Prädikat „ pred “ den Wert „true“ zurückgibt.

Die Funktion unterstützt Prädikate, die entweder ein Argument vom Typ „ QHash<Key, T>::iterator “ oder ein Argument vom Typ „ std::pair<const Key &, T &> “ entgegennehmen.

Gibt die Anzahl der entfernten Elemente zurück, falls vorhanden.

Diese Funktion wurde in Qt 6.1 eingeführt.

[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)

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Hinweis: Vor Qt 6.5 griffen nicht in den Geltungsbereich eingebundene Enums aufgrund der impliziten Konvertierung in ihre zugrunde liegenden Ganzzahltypen auf die Ganzzahl-Überladungen dieser Funktion zurück. Für in den Geltungsbereich eingebundene Enums musste man eine Überladung selbst implementieren. Dies ist nach wie vor die abwärtskompatible Lösung, um die Kompatibilität mit älteren Qt-Versionen zu gewährleisten.

Diese Funktion wurde in Qt 6.5 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hashwert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hashwert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

[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)

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Hinweis: Hierbei handelt es sich um `qHash(bool)`, das ausschließlich Argumente vom Typ `bool` akzeptiert, nicht jedoch Argumente von Typen, die lediglich in `bool` konvertiert werden.

Hinweis: In Qt-Versionen vor 6.9 wurde diese Überladung unbeabsichtigt durch eine undokumentierte qHash-Adapter-Template-Funktion mit 1-zu-2-Argumenten bereitgestellt, die identisches Verhalten aufwies.

Diese Funktion wurde in Qt 6.9 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hashwert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Die Typen ` Key ` und ` T ` müssen von `qHash()` unterstützt werden.

Hinweis: Diese Funktion ist „noexcept“, wenn noexcept(qHash(std::declval<Key&>())) && noexcept(qHash(std::declval<T&>())) gleich true ist.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Der Typ „ T “ muss von qHash() unterstützt werden.

Der Hash-Wert ist unabhängig von der Reihenfolge der Elemente in ` key`, d. h., Mengen, die dieselben Elemente enthalten, ergeben denselben Hash-Wert.

Hinweis: Diese Funktion ist „noexcept“, wenn „ noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)) “ gleich „ true “ ist.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

[constexpr noexcept(...), since 6.12] template <typename T> size_t qHash(const std::optional<T> &key, size_t seed = 0)

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Der Typ „ T “ muss von qHash() unterstützt werden.

Dies entspricht

key ? qHash(*key, seed) : qHash(std::nullopt, seed);

Insbesondere gilt: Wenn „ key “ aktiviert ist (has_value()), ist garantiert, dass der Hash-Wert von „ key “ mit dem von „ key.value() “ übereinstimmt, und alle deaktivierten (!has_value()) Optionals beliebigen Typs ergeben denselben Hash-Wert.

Diese Funktion wurde in Qt 6.12 eingeführt.

Hinweis: Diese Funktion ist „noexcept“, wenn „ QHashPrivate::noexceptPairHash<T, T>() “ den Wert „ true “ hat.

Siehe auch qHash (std::nullopt_t, size_t).

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Die Typen ` T1 ` und ` T2 ` müssen von `qHash()` unterstützt werden.

Hinweis: Diese Funktion ist „noexcept“, wenn QHashPrivate::noexceptPairHash<T1, T2>() gleich true ist.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hashwert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Hinweis: Diese Funktion ist nur auf Plattformen verfügbar, die einen nativen 128-Bit-Ganzzahltyp unterstützen.

Diese Funktion wurde in Qt 6.8 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

Hinweis: Diese Funktion ist nur auf Plattformen verfügbar, die einen nativen 128-Bit-Ganzzahltyp unterstützen.

Diese Funktion wurde in Qt 6.8 eingeführt.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hashwert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Gibt den Hash-Wert für den Speicherblock der Größe len zurück, auf den p verweist, wobei seed als Startwert für die Berechnung verwendet wird.

Verwenden Sie diese Funktion ausschließlich zur Implementierung von ` qHash()` für Ihre eigenen benutzerdefinierten Typen. So könnten Sie beispielsweise eine Überladung von ` qHash()` für `std::vector<int>` implementieren:

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);
}

Dies nutzt die Tatsache aus, dass std::vector seine Daten zusammenhängend anordnet. Ist dies nicht der Fall oder weist der enthaltene Typ Auffüllung auf, sollten Sie stattdessen qHashRange() verwenden.

Es sei noch einmal darauf hingewiesen, dass sich die Implementierung von `qHashBits()` – ebenso wie die von Qt angebotenen Überladungen von ` qHash()` – jederzeit ändern kann. Sie dürfen sich nicht darauf verlassen, dass `qHashBits()` über verschiedene Qt-Versionen hinweg (bei gleichen Eingaben) immer dieselben Ergebnisse liefert.

Siehe auch ` qHashRange()` und ` qHashRangeCommutative()`.

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

Gibt den Hash-Wert für die Funktion ` args` zurück, wobei ` seed ` als Startwert für die Berechnung verwendet wird, indem ` qHash()` nacheinander auf jedes Element angewendet und die Hash-Werte zu einem einzigen zusammengefasst werden.

Beachten Sie, dass die Reihenfolge der Argumente von Bedeutung ist. Wenn die Reihenfolge keine Rolle spielt, verwenden Sie stattdessen ` qHashMultiCommutative()`. Wenn Sie Rohspeicher hashen, verwenden Sie ` qHashBits()`; wenn Sie einen Bereich hashen, verwenden Sie ` qHashRange()`.

Diese Funktion wird als Hilfsmittel bereitgestellt, um ` qHash()` für Ihre eigenen benutzerdefinierten Typen zu implementieren. So könnten Sie beispielsweise eine Überladung von ` qHash()` für eine Klasse ` Employee` implementieren:

#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

Diese Funktion wurde in Qt 6.0 eingeführt.

Hinweis: Diese Funktion ist `noexcept`, wenn ` std::conjunction_v<QtPrivate::QNothrowHashable<T>...> ` gleich ` true` ist.

Siehe auch „ qHashMultiCommutative “ und „ qHashRange “.

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

Gibt den Hash-Wert für ` args` zurück, wobei ` seed ` als Startwert für die Berechnung verwendet wird, indem ` qHash()` nacheinander auf jedes Element angewendet und die Hash-Werte zu einem einzigen zusammengefasst werden.

Die Reihenfolge der Argumente spielt keine Rolle. Sollte die Reihenfolge doch von Bedeutung sein, verwenden Sie stattdessen ` qHashMulti()`, da dies möglicherweise zu einer besseren Hash-Qualität führt. Wenn Sie Rohspeicher hashen, verwenden Sie ` qHashBits()`; wenn Sie einen Bereich hashen, verwenden Sie ` qHashRange()`.

Diese Funktion wird als Hilfsmittel bereitgestellt, um ` qHash()` für Ihre eigenen benutzerdefinierten Typen zu implementieren.

Diese Funktion wurde in Qt 6.0 eingeführt.

Hinweis: Diese Funktion ist „noexcept“, wenn „ std::conjunction_v<QtPrivate::QNothrowHashable<T>...> “ gleich „ true “ ist.

Siehe auch „ qHashMulti “ und „ qHashRange “.

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

Gibt den Hash-Wert für den Bereich [first,last) zurück, wobei seed als Startwert für die Berechnung verwendet wird, indem qHash() nacheinander auf jedes Element angewendet und die Hash-Werte zu einem einzigen zusammengefasst werden.

Der Rückgabewert dieser Funktion hängt von der Reihenfolge der Elemente im Bereich ab. Das bedeutet, dass

{0, 1, 2}

und

{1, 2, 0}

unterschiedliche Hash-Werte erzeugt. Wenn die Reihenfolge keine Rolle spielt, beispielsweise bei Hash-Tabellen, verwenden Sie stattdessen qHashRangeCommutative(). Wenn Sie Rohspeicher hashen, verwenden Sie qHashBits().

Verwenden Sie diese Funktion ausschließlich zur Implementierung von ` qHash()` für Ihre eigenen benutzerdefinierten Typen. So könnten Sie beispielsweise eine Überladung von ` qHash()` für `std::vector<int>` implementieren:

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

Es sei nochmals darauf hingewiesen, dass sich die Implementierung von `qHashRange()` – ebenso wie die von Qt angebotenen Überladungen von ` qHash()` – jederzeit ändern kann. Sie dürfen sich nicht darauf verlassen, dass `qHashRange()` über verschiedene Qt-Versionen hinweg (bei gleichen Eingaben) dieselben Ergebnisse liefert, selbst wenn ` qHash()` für den Elementtyp dies tun würde.

Hinweis: Diese Funktion ist „noexcept“, wenn noexcept(qHash(*first, 0)) gleich true ist.

Siehe auch ` qHashBits()` und ` qHashRangeCommutative()`.

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

Gibt den Hash-Wert für den Bereich [first,last) zurück, wobei seed als Startwert für die Berechnung verwendet wird, indem qHash() nacheinander auf jedes Element angewendet und die Hash-Werte zu einem einzigen zusammengefasst werden.

Der Rückgabewert dieser Funktion hängt nicht von der Reihenfolge der Elemente im Bereich ab. Das bedeutet, dass

{0, 1, 2}

sowohl

{1, 2, 0}

die gleichen Hash-Werte ergeben. Wenn die Reihenfolge eine Rolle spielt, beispielsweise bei Vektoren und Arrays, verwenden Sie stattdessen qHashRange(). Wenn Sie Rohspeicher hashen, verwenden Sie qHashBits().

Verwenden Sie diese Funktion ausschließlich zur Implementierung von ` qHash()` für Ihre eigenen benutzerdefinierten Typen. So könnten Sie beispielsweise eine Überladung von ` qHash()` für `std::unordered_set<int>` implementieren:

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

Es sei nochmals darauf hingewiesen, dass sich die Implementierung von `qHashRangeCommutative()` – ebenso wie die von Qt XML angebotenen Überladungen von ` qHash()` – jederzeit ändern kann. Sie dürfen sich nicht darauf verlassen, dass `qHashRangeCommutative()` über verschiedene Qt-Versionen hinweg (bei gleichen Eingaben) dieselben Ergebnisse liefert, selbst wenn ` qHash()` für den Elementtyp dies tun würde.

Hinweis: Diese Funktion ist `noexcept`, wenn ` noexcept(qHash(*first, 0)) ` gleich ` true` ist.

Siehe auch ` qHashBits()` und ` qHashRange()`.

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

Gibt „ true “ zurück, wenn der Hash unter lhs nicht mit dem Hash unter rhs übereinstimmt; andernfalls wird „ false “ zurückgegeben.

Zwei Hashes gelten als gleich, wenn sie dieselben (Schlüssel, Wert)-Paare enthalten.

Diese Funktion setzt voraus, dass der Werttyp die Schnittstelle ` operator==()` implementiert.

Siehe auch „ operator==()“.

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

Schreibt den Hash „ hash “ in den Stream „ out “.

Diese Funktion setzt voraus, dass die Schlüssel- und Werttypen „ operator<<() “ implementieren.

Siehe auch „Serialisierung vonQt-Datentypen“.

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

Gibt „ true “ zurück, wenn der Hash von „ lhs “ mit dem Hash von „ rhs “ übereinstimmt; andernfalls wird „ false “ zurückgegeben.

Zwei Hashes gelten als gleich, wenn sie dieselben (Schlüssel, Wert)-Paare enthalten.

Diese Funktion setzt voraus, dass der Werttyp die Schnittstelle „ operator==() “ implementiert.

Siehe auch ` operator!=()`.

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

Liest einen Hash aus dem Stream „ in “ in „ hash “ ein.

Diese Funktion setzt voraus, dass die Schlüssel- und Werttypen „ operator>>() “ implementieren.

Siehe auch „Serialisierung vonQt-Datentypen“.

Makro-Dokumentation

[since 6.11] QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD

Durch die Definition dieses Makros wird die Unterstützung für Überladungen von ` qHash ` deaktiviert, die nur ein Argument entgegennehmen; mit anderen Worten: für Überladungen von ` qHash `, die keinen Startwert akzeptieren. Die Unterstützung für die Überladungen von ` qHash ` mit einem einzigen Argument ist veraltet und wird in Qt 7 entfernt.

Dieses Makro wurde in Qt 6.11 eingeführt.

Siehe auch 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.