QSet Class
template <typename T> class QSetDie Klasse QSet ist eine Vorlagenklasse, die eine auf Hash-Tabellen basierende Menge bereitstellt. Mehr...
Kopfzeile: | #include <QSet> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSet ist Teil von Implicitly Shared Classes.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
class | const_iterator |
class | iterator |
ConstIterator | |
Iterator | |
const_pointer | |
const_reference | |
difference_type | |
key_type | |
pointer | |
reference | |
size_type | |
value_type |
Öffentliche Funktionen
QSet() | |
QSet(std::initializer_list<T> list) | |
QSet(InputIterator first, InputIterator last) | |
QSet<T>::const_iterator | begin() const |
QSet<T>::iterator | begin() |
qsizetype | capacity() const |
QSet<T>::const_iterator | cbegin() const |
QSet<T>::const_iterator | cend() const |
void | clear() |
QSet<T>::const_iterator | constBegin() const |
QSet<T>::const_iterator | constEnd() const |
QSet<T>::const_iterator | constFind(const T &value) const |
bool | contains(const QSet<T> &other) const |
bool | contains(const T &value) const |
qsizetype | count() const |
bool | empty() const |
QSet<T>::const_iterator | end() const |
QSet<T>::iterator | end() |
QSet<T>::iterator | erase(QSet<T>::const_iterator pos) |
QSet<T>::const_iterator | find(const T &value) const |
QSet<T>::iterator | find(const T &value) |
QSet<T>::iterator | insert(const T &value) |
(since 6.1) QSet<T>::iterator | insert(QSet<T>::const_iterator it, const T &value) |
QSet<T> & | intersect(const QSet<T> &other) |
bool | intersects(const QSet<T> &other) const |
bool | isEmpty() const |
bool | remove(const T &value) |
(since 6.1) qsizetype | removeIf(Pred pred) |
void | reserve(qsizetype size) |
qsizetype | size() const |
void | squeeze() |
QSet<T> & | subtract(const QSet<T> &other) |
void | swap(QSet<T> &other) |
QSet<T> & | unite(const QSet<T> &other) |
QList<T> | values() const |
bool | operator!=(const QSet<T> &other) const |
QSet<T> & | operator&=(const QSet<T> &other) |
QSet<T> & | operator&=(const T &value) |
QSet<T> & | operator+=(const QSet<T> &other) |
QSet<T> & | operator+=(const T &value) |
QSet<T> & | operator-=(const QSet<T> &other) |
QSet<T> & | operator-=(const T &value) |
QSet<T> & | operator<<(const T &value) |
bool | operator==(const QSet<T> &other) const |
QSet<T> & | operator|=(const QSet<T> &other) |
QSet<T> & | operator|=(const T &value) |
Verwandte Nicht-Mitglieder
(since 6.1) qsizetype | erase_if(QSet<T> &set, Predicate pred) |
QSet<T> | operator&(QSet<T> &&lhs, const QSet<T> &rhs) |
QSet<T> | operator&(const QSet<T> &lhs, const QSet<T> &rhs) |
QSet<T> | operator+(QSet<T> &&lhs, const QSet<T> &rhs) |
QSet<T> | operator+(const QSet<T> &lhs, const QSet<T> &rhs) |
QSet<T> | operator-(QSet<T> &&lhs, const QSet<T> &rhs) |
QSet<T> | operator-(const QSet<T> &lhs, const QSet<T> &rhs) |
QDataStream & | operator<<(QDataStream &out, const QSet<T> &set) |
QDataStream & | operator>>(QDataStream &in, QSet<T> &set) |
QSet<T> | operator|(QSet<T> &&lhs, const QSet<T> &rhs) |
QSet<T> | operator|(const QSet<T> &lhs, const QSet<T> &rhs) |
Detaillierte Beschreibung
QSet<T> ist eine der generischen Container-Klassen von Qt. Sie speichert Werte in einer nicht spezifizierten Reihenfolge und ermöglicht ein sehr schnelles Nachschlagen der Werte. Intern ist QSet<T> als QHash implementiert.
Hier ist ein Beispiel für ein QSet mit QString Werten:
Um einen Wert in die Menge einzufügen, verwenden Sie insert():
set.insert("one"); set.insert("three"); set.insert("seven");
Eine andere Möglichkeit, Elemente in die Menge einzufügen, ist die Verwendung von operator<<():
set << "twelve" << "fifteen" << "nineteen";
Um zu prüfen, ob ein Element zum Set gehört oder nicht, verwenden Sie contains():
if (!set.contains("ninety-nine")) ...
Wenn Sie durch alle in einem QSet gespeicherten Werte navigieren wollen, können Sie einen Iterator verwenden. QSet unterstützt sowohl Iteratoren im Java-Stil (QSetIterator und QMutableSetIterator) als auch Iteratoren im STL-Stil (QSet::iterator und QSet::const_iterator). Im Folgenden wird beschrieben, wie man mit einem Java-Iterator über ein QSet<QWidget *> iteriert:
QSetIterator<QWidget*> i(set);while (i.hasNext()) { QWidget *w = i.next(); qDebug() << w; }
Hier ist derselbe Code, aber mit einem Iterator im STL-Stil:
for(auto i = set.cbegin(), end = set.cend(); i != end;++i) qDebug() << *i;
QSet ist ungeordnet, daher kann nicht davon ausgegangen werden, dass die Reihenfolge eines Iterators vorhersehbar ist. Wenn eine Ordnung nach Schlüssel erforderlich ist, verwenden Sie QMap.
Um durch ein QSet zu navigieren, können Sie auch bereichsbasierte for verwenden:
Elemente können mit remove() aus der Menge entfernt werden. Es gibt auch eine Funktion clear(), die alle Elemente entfernt.
Der Wertdatentyp von QSet muss ein zuweisbarer Datentyp sein. Sie können z. B. nicht QWidget als Wert speichern; speichern Sie stattdessen QWidget *. Darüber hinaus muss der Typ operator==()
zur Verfügung stellen, und es muss auch eine globale Funktion qHash() vorhanden sein, die einen Hash-Wert für ein Argument vom Typ des Schlüssels zurückgibt. In der Dokumentation QHash finden Sie eine Liste der von qHash() unterstützten Typen.
Intern verwendet QSet eine Hash-Tabelle, um Lookups durchzuführen. Die Hash-Tabelle wächst und schrumpft automatisch, um schnelle Suchvorgänge zu ermöglichen, ohne Speicher zu verschwenden. Sie können die Größe der Hash-Tabelle immer noch durch den Aufruf von reserve() kontrollieren, wenn Sie bereits ungefähr wissen, wie viele Elemente das QSet enthalten wird, aber dies ist nicht notwendig, um eine gute Leistung zu erzielen. Sie können auch capacity() aufrufen, um die Größe der Hash-Tabelle abzufragen.
Siehe auch QSetIterator, QMutableSetIterator, QHash, und QMap.
Dokumentation der Mitgliedstypen
QSet::ConstIterator
Qt-style ist ein Synonym für QSet::const_iterator.
QSet::Iterator
Qt-style ist ein Synonym für QSet::iterator.
QSet::const_pointer
Typendefinition für const T *. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::const_reference
Typendefinition für const T &. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::difference_type
Typendefinition für const ptrdiff_t. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::key_type
Typedef für T. Wird aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::pointer
Typendefinition für T *. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::reference
Typendefinition für T &. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::size_type
Typendefinition für int. Aus Gründen der STL-Kompatibilität bereitgestellt.
QSet::value_type
Typedef für T. Wird aus Gründen der STL-Kompatibilität bereitgestellt.
Dokumentation der Mitgliedsfunktionen
QSet<T> &QSet::operator+=(const T &value)
QSet<T> &QSet::operator<<(const T &value)
QSet<T> &QSet::operator|=(const T &value)
Fügt ein neues Element value ein und gibt einen Verweis auf die Menge zurück. Wenn value bereits in der Menge vorhanden ist, wird die Menge unverändert gelassen.
Siehe auch insert().
Gleiches wie unite(other).
Siehe auch operator|(), operator&=(), und operator-=().
[noexcept]
QSet::QSet()
Konstruiert eine leere Menge.
Siehe auch clear().
QSet::QSet(std::initializer_list<T> list)
Konstruiert eine Menge mit einer Kopie von jedem der Elemente in der Initialisierungsliste list.
template <typename InputIterator, QtPrivate::IfIsInputIterator<InputIterator> = true> QSet::QSet(InputIterator first, InputIterator last)
Konstruiert eine Menge mit dem Inhalt im Iteratorbereich [first, last).
Der Wertetyp von InputIterator
muss in T
konvertierbar sein.
Hinweis: Wenn der Bereich [first, last) doppelte Elemente enthält, wird das erste Element beibehalten.
[noexcept]
QSet<T>::const_iterator QSet::begin() const
Gibt einen Iterator im Stil von const STL zurück, der auf das erste Element der Menge positioniert ist.
Siehe auch constBegin() und end().
QSet<T>::iterator QSet::begin()
Dies ist eine überladene Funktion.
Gibt einen nicht-konstanten Iterator im STL-Stil zurück, der am ersten Element der Menge positioniert ist.
qsizetype QSet::capacity() const
Gibt die Anzahl der Eimer in der internen Hash-Tabelle des Sets zurück.
Der einzige Zweck dieser Funktion besteht darin, die Speichernutzung von QSet fein abzustimmen. Im Allgemeinen werden Sie diese Funktion nur selten aufrufen müssen. Wenn Sie wissen wollen, wie viele Elemente sich in der Menge befinden, rufen Sie size() auf.
Siehe auch reserve() und squeeze().
[noexcept]
QSet<T>::const_iterator QSet::cbegin() const
Gibt einen Iterator im Stil von const STL zurück, der auf das erste Element der Menge positioniert ist.
Siehe auch begin() und cend().
[noexcept]
QSet<T>::const_iterator QSet::cend() const
Gibt einen const STL-artigen Iterator zurück, der auf das imaginäre Element nach dem letzten Element der Menge zeigt.
Siehe auch cbegin() und end().
void QSet::clear()
Entfernt alle Elemente aus der Menge.
Siehe auch remove().
[noexcept]
QSet<T>::const_iterator QSet::constBegin() const
Gibt einen Iterator im Stil von const STL zurück, der auf das erste Element der Menge positioniert ist.
Siehe auch begin() und constEnd().
[noexcept]
QSet<T>::const_iterator QSet::constEnd() const
Gibt einen const STL-artigen Iterator zurück, der auf das imaginäre Element nach dem letzten Element der Menge zeigt.
Siehe auch constBegin() und end().
QSet<T>::const_iterator QSet::constFind(const T &value) const
Gibt einen konstanten Iterator zurück, der auf das Element value in der Menge positioniert ist. Wenn die Menge kein Element value enthält, gibt die Funktion constEnd() zurück.
Siehe auch find() und contains().
bool QSet::contains(const QSet<T> &other) const
Gibt true
zurück, wenn die Menge alle Elemente aus der Menge other enthält; andernfalls wird false
zurückgegeben.
Siehe auch insert(), remove(), und find().
bool QSet::contains(const T &value) const
Gibt true
zurück, wenn die Menge das Element value enthält; andernfalls wird false zurückgegeben.
Siehe auch insert(), remove(), und find().
qsizetype QSet::count() const
Dasselbe wie size().
bool QSet::empty() const
Gibt true
zurück, wenn die Menge leer ist. Diese Funktion ist aus Gründen der STL-Kompatibilität vorgesehen. Sie ist äquivalent zu isEmpty().
[noexcept]
QSet<T>::const_iterator QSet::end() const
Gibt einen Iterator im Stil von const STL zurück, der auf das imaginäre Element nach dem letzten Element der Menge positioniert ist.
Siehe auch constEnd() und begin().
QSet<T>::iterator QSet::end()
Dies ist eine überladene Funktion.
Gibt einen nicht-konstanten Iterator im STL-Stil zurück, der auf das imaginäre Element nach dem letzten Element der Menge zeigt.
QSet<T>::iterator QSet::erase(QSet<T>::const_iterator pos)
Entfernt das Element an der Iteratorposition pos aus der Menge und gibt einen Iterator an der Position des nächsten Elements in der Menge zurück.
Im Gegensatz zu remove() führt diese Funktion nicht dazu, dass QSet seine interne Datenstruktur neu aufbereitet. Das bedeutet, dass sie sicher aufgerufen werden kann, während sie iteriert, und die Reihenfolge der Elemente in der Menge nicht beeinflusst.
Hinweis: Der Iterator pos muss gültig und dereferenzierbar sein. Der Aufruf dieser Methode mit einem anderen Iterator, einschließlich seines eigenen end(), führt zu undefiniertem Verhalten. Insbesondere kann auch der begin() Iterator einer leeren Menge nicht dereferenziert werden.
Siehe auch remove() und find().
QSet<T>::const_iterator QSet::find(const T &value) const
Gibt einen konstanten Iterator zurück, der auf das Element value in der Menge positioniert ist. Wenn die Menge kein Element value enthält, gibt die Funktion constEnd() zurück.
Siehe auch constFind() und contains().
QSet<T>::iterator QSet::find(const T &value)
Dies ist eine überladene Funktion.
Gibt einen nicht-konstanten Iterator zurück, der auf das Element value in der Menge positioniert ist. Wenn die Menge kein Element value enthält, gibt die Funktion end() zurück.
QSet<T>::iterator QSet::insert(const T &value)
Fügt das Element value in die Menge ein, wenn value nicht bereits in der Menge enthalten ist, und gibt einen Iterator zurück, der auf das eingefügte Element zeigt.
Siehe auch operator<<(), remove(), und contains().
[since 6.1]
QSet<T>::iterator QSet::insert(QSet<T>::const_iterator it, const T &value)
Dies ist eine überladene Funktion.
Fügt das Element value in die Menge ein, wenn value nicht bereits in der Menge enthalten ist, und gibt einen Iterator zurück, der auf das eingefügte Element zeigt.
Der Iterator it wird ignoriert.
Diese Funktion wird aus Gründen der Kompatibilität mit der STL bereitgestellt.
Diese Funktion wurde in Qt 6.1 eingeführt.
Siehe auch operator<<(), remove(), und contains().
QSet<T> &QSet::intersect(const QSet<T> &other)
Entfernt alle Elemente aus dieser Menge, die nicht in der Menge other enthalten sind. Es wird ein Verweis auf diese Menge zurückgegeben.
Siehe auch intersects(), operator&=(), unite(), und subtract().
bool QSet::intersects(const QSet<T> &other) const
Gibt true
zurück, wenn diese Menge mindestens ein Element mit other gemeinsam hat.
Siehe auch contains() und intersect().
bool QSet::isEmpty() const
Gibt true
zurück, wenn die Menge keine Elemente enthält; andernfalls wird false zurückgegeben.
Siehe auch size().
bool QSet::remove(const T &value)
Entfernt jedes Vorkommen des Elements value aus der Menge. Gibt true zurück, wenn ein Element tatsächlich entfernt wurde; andernfalls wird false
zurückgegeben.
Siehe auch contains() und insert().
[since 6.1]
template <typename Pred> qsizetype QSet::removeIf(Pred pred)
Entfernt aus dieser Menge alle Elemente, für die das Prädikat pred true
liefert. Gibt die Anzahl der entfernten Elemente zurück, falls vorhanden.
Diese Funktion wurde in Qt 6.1 eingeführt.
void QSet::reserve(qsizetype size)
Stellt sicher, dass die interne Hash-Tabelle der Menge mindestens aus size Buckets besteht.
Diese Funktion ist nützlich für Code, der eine große Menge aufbauen muss und wiederholte Neuzuweisungen vermeiden will. Ein Beispiel:
Idealerweise sollte size etwas mehr als die maximale Anzahl von Elementen sein, die in der Menge erwartet werden. size muss keine Primzahl sein, da QSet intern ohnehin eine Primzahl verwenden wird. Wenn size eine zu niedrige Schätzung ist, wird QSet schlimmstenfalls etwas langsamer sein.
Im Allgemeinen werden Sie diese Funktion nur selten aufrufen müssen. QSet Die interne Hash-Tabelle von schrumpft oder wächst automatisch, um eine gute Leistung zu erzielen, ohne zu viel Speicher zu verschwenden.
Siehe auch squeeze() und capacity().
qsizetype QSet::size() const
Gibt die Anzahl der Elemente in der Menge zurück.
Siehe auch isEmpty() und count().
void QSet::squeeze()
Verringert die Größe der internen Hash-Tabelle des Sets, um Speicher zu sparen.
Der einzige Zweck dieser Funktion besteht darin, eine Feinabstimmung der Speichernutzung von QSet zu ermöglichen. Im Allgemeinen werden Sie diese Funktion nur selten aufrufen müssen.
Siehe auch reserve() und capacity().
QSet<T> &QSet::subtract(const QSet<T> &other)
Entfernt alle Elemente aus dieser Menge, die in der Menge other enthalten sind. Gibt einen Verweis auf diese Menge zurück.
Siehe auch operator-=(), unite(), und intersect().
[noexcept]
void QSet::swap(QSet<T> &other)
Tauscht diesen Satz mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
QSet<T> &QSet::unite(const QSet<T> &other)
Jedes Element in der Menge other, das nicht bereits in dieser Menge enthalten ist, wird in diese Menge eingefügt. Ein Verweis auf diese Menge wird zurückgegeben.
Siehe auch operator|=(), intersect(), und subtract().
QList<T> QSet::values() const
Gibt eine neue QList zurück, die die Elemente der Menge enthält. Die Reihenfolge der Elemente in QList ist undefiniert.
Hinweis: Seit Qt 5.14 sind Range-Konstruktoren für die generischen Containerklassen von Qt verfügbar und sollten anstelle dieser Methode verwendet werden.
Diese Funktion erzeugt eine neue Liste, in linearer Zeit. Der damit verbundene Zeit- und Speicherverbrauch kann durch Iteration von constBegin() nach constEnd() vermieden werden.
bool QSet::operator!=(const QSet<T> &other) const
Gibt true
zurück, wenn die Menge other nicht gleich dieser Menge ist; andernfalls wird false
zurückgegeben.
Zwei Mengen werden als gleich angesehen, wenn sie die gleichen Elemente enthalten.
Für diese Funktion muss der Wertetyp operator==()
implementiert sein.
Siehe auch operator==().
QSet<T> &QSet::operator&=(const QSet<T> &other)
Gleiches wie intersect(other).
Siehe auch operator&(), operator|=(), und operator-=().
QSet<T> &QSet::operator&=(const T &value)
Dies ist eine überladene Funktion.
Sie ist identisch mit intersect(other), wenn wir andere als eine Menge betrachten, die das Singleton value enthält.
QSet<T> &QSet::operator-=(const QSet<T> &other)
Gleiches wie subtract(other).
Siehe auch operator-(), operator|=(), und operator&=().
QSet<T> &QSet::operator-=(const T &value)
Entfernt das Vorkommen des Elements value aus der Menge, falls es gefunden wird, und gibt einen Verweis auf die Menge zurück. Wenn value nicht in der Menge enthalten ist, wird nichts entfernt.
Siehe auch remove().
bool QSet::operator==(const QSet<T> &other) const
Gibt true
zurück, wenn die Menge other mit dieser Menge übereinstimmt; andernfalls wird false
zurückgegeben.
Zwei Mengen werden als gleich angesehen, wenn sie die gleichen Elemente enthalten.
Für diese Funktion muss der Wertetyp operator==()
implementiert sein.
Siehe auch operator!=().
Verwandte Nicht-Mitglieder
QSet<T> operator+(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator+(const QSet<T> &lhs, const QSet<T> &rhs)
QSet<T> operator|(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator|(const QSet<T> &lhs, const QSet<T> &rhs)
Gibt ein neues QSet zurück, das die Vereinigung der Mengen lhs und rhs ist.
Siehe auch unite(), operator|=(), operator&(), und operator-().
QSet<T> operator&(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator&(const QSet<T> &lhs, const QSet<T> &rhs)
Gibt eine neue QSet zurück, die die Schnittmenge der Mengen lhs und rhs ist.
Siehe auch intersect(), operator&=(), operator|(), und operator-().
QSet<T> operator-(QSet<T> &&lhs, const QSet<T> &rhs)
QSet<T> operator-(const QSet<T> &lhs, const QSet<T> &rhs)
Gibt eine neue QSet zurück, die die Differenz der Mengen lhs und rhs ist.
Siehe auch subtract(), operator-=(), operator|(), und operator&().
[since 6.1]
template <typename T, typename Predicate> qsizetype erase_if(QSet<T> &set, Predicate pred)
Entfernt alle Elemente, für die das Prädikat pred den Wert true liefert, aus der Menge set. Gibt die Anzahl der entfernten Elemente zurück, falls vorhanden.
Diese Funktion wurde in Qt 6.1 eingeführt.
template <typename T> QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
Schreibt den Wert set in den Stream out.
Für diese Funktion muss der Wertetyp operator<<()
implementiert sein.
Siehe auch Format der QDataStream-Operatoren.
template <typename T> QDataStream &operator>>(QDataStream &in, QSet<T> &set)
Liest eine Menge aus dem Stream in in set.
Für diese Funktion muss der Wertetyp operator>>()
implementiert sein.
Siehe auch Format der QDataStream-Operatoren.
© 2025 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.