Auf dieser Seite

QHash::iterator Class

class QHash::iterator

Die Klasse „ QHash::iterator “ stellt einen nicht-konstanten Iterator im STL-Stil für „ QHash “ bereit. Mehr...

Öffentliche Funktionen

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

Ausführliche Beschreibung

QHashMit <Key, T>::iterator können Sie eine „ QHash “ durchlaufen und den Wert (jedoch nicht den Schlüssel) ändern, der einem bestimmten Schlüssel zugeordnet ist. Wenn Sie eine „const“- QHash durchlaufen möchten, sollten Sie „ QHash::const_iterator “ verwenden. Es empfiehlt sich generell, „ QHash::const_iterator “ auch bei einer nicht-konstanten „ QHash “ zu verwenden, es sei denn, Sie müssen die „ QHash “ über den Iterator ändern. „Const“-Iteratoren sind etwas schneller und können die Lesbarkeit des Codes verbessern.

Der Standardkonstruktor von ` QHash::iterator ` erstellt einen nicht initialisierten Iterator. Sie müssen ihn mit einer ` QHash `-Funktion wie ` QHash::begin()`, ` QHash::end()` oder ` QHash::find()` initialisieren, bevor Sie mit der Iteration beginnen können. Hier ist eine typische Schleife, die alle in einem Hash gespeicherten (Schlüssel, Wert)-Paare ausgibt:

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

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

Im Gegensatz zu ` QMap`, das seine Elemente nach Schlüssel sortiert, speichert ` QHash ` seine Elemente in beliebiger Reihenfolge.

Hier ist ein Beispiel, das jeden im „ QHash “ gespeicherten Wert um 2 erhöht:

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

Um Elemente aus einem „ QHash “ zu entfernen, können Sie „ erase_if “ verwenden (`QHash<Key, T> &map, Predicate pred)`:

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

Es können mehrere Iteratoren für denselben Hash verwendet werden. Beachten Sie jedoch, dass jede direkt am QHash vorgenommene Änderung (Einfügen und Entfernen von Elementen) dazu führen kann, dass die Iteratoren ungültig werden.

Das Einfügen von Elementen in den Hash oder der Aufruf von Methoden wie ` QHash::reserve()` oder ` QHash::squeeze()` kann dazu führen, dass alle auf den Hash verweisenden Iteratoren ungültig werden. Iteratoren bleiben nur so lange garantiert gültig, wie die ` QHash ` ihre interne Hash-Tabelle nicht vergrößern oder verkleinern muss. Die Verwendung eines Iterators nach einer Neuhash-Operation führt zu undefiniertem Verhalten.

Wenn Sie Iteratoren über einen längeren Zeitraum beibehalten müssen, empfehlen wir Ihnen, QMap anstelle von QHash zu verwenden.

Warnung: Iteratoren auf implizit gemeinsam genutzten Containern funktionieren nicht genau wie STL-Iteratoren. Sie sollten es vermeiden, einen Container zu kopieren, während Iteratoren auf diesem Container aktiv sind. Weitere Informationen finden Sie unter „Problem mit Iteratoren bei impliziter gemeinsamen Nutzung“.

Siehe auch „ QHash::const_iterator “, „ QHash::key_iterator “ und „ QHash::key_value_iterator “.

Dokumentation zu Mitgliedsfunktionen

[constexpr noexcept default] iterator::iterator()

Erstellt einen nicht initialisierten Iterator.

Funktionen wie ` key()`, ` value()` und der Operator `++()` dürfen nicht für einen nicht initialisierten Iterator aufgerufen werden. Verwenden Sie den Operator `=()`, um ihm vor der Verwendung einen Wert zuzuweisen.

Siehe auch ` QHash::begin()` und ` QHash::end()`.

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

Gibt den Schlüssel des aktuellen Elements als konstante Referenz zurück.

Es gibt keine direkte Möglichkeit, den Schlüssel eines Elements über einen Iterator zu ändern, allerdings ist dies durch den Aufruf von ` QHash::erase()` gefolgt von ` QHash::insert()` möglich.

Siehe auch ` value()`.

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

Gibt eine veränderbare Referenz auf den Wert des aktuellen Elements zurück.

Sie können den Wert eines Elements ändern, indem Sie `value()` auf der linken Seite einer Zuweisung verwenden, zum Beispiel:

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

Siehe auch „ key()“ und „ operator*()“.

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

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

Gibt „ true “ zurück, wenn „ other “ auf ein anderes Element als diesen Iterator verweist; andernfalls wird „ false “ zurückgegeben.

Siehe auch operator==().

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

Gibt eine veränderbare Referenz auf den Wert des aktuellen Elements zurück.

Entspricht „ value()“.

Siehe auch ` key()`.

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

Der Präfix-Operator „++“ (++i) verschiebt den Iterator zum nächsten Element im Hash und gibt einen Iterator auf das neue aktuelle Element zurück.

Der Aufruf dieser Funktion auf ` QHash::end()` führt zu undefinierten Ergebnissen.

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

Der Postfix-Operator „++“ (i++) verschiebt den Iterator zum nächsten Element im Hash und gibt einen Iterator auf das zuvor aktuelle Element zurück.

Dies ist eine überladene Funktion.

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

Gibt einen Zeiger auf den Wert des aktuellen Elements zurück.

Siehe auch „ value()“.

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

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

Gibt ` true ` zurück, wenn ` other ` auf dasselbe Element wie dieser Iterator verweist; andernfalls wird ` false` zurückgegeben.

Siehe auch operator!=().

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