QMultiMap Class

template <typename Key, typename T> class QMultiMap

Die Klasse QMultiMap ist eine Vorlagenklasse, die ein assoziatives Array mit mehreren gleichwertigen Schlüsseln bereitstellt. Mehr...

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

Hinweis: Alle Funktionen in dieser Klasse sind reentrant.

Öffentliche Typen

Öffentliche Funktionen

QMultiMap()
(since 6.0) QMultiMap(QMap<Key, T> &&other)
(since 6.0) QMultiMap(const QMap<Key, T> &other)
QMultiMap(const std::multimap<Key, T> &other)
QMultiMap(std::initializer_list<std::pair<Key, T>> list)
QMultiMap(std::multimap<Key, T> &&other)
QMultiMap(const QMultiMap<Key, T> &other)
QMultiMap(QMultiMap<Key, T> &&other)
~QMultiMap()
(since 6.4) auto asKeyValueRange() &&
(since 6.4) auto asKeyValueRange() &
(since 6.4) auto asKeyValueRange() const &&
(since 6.4) auto asKeyValueRange() const &
QMultiMap<Key, T>::iterator begin()
QMultiMap<Key, T>::const_iterator begin() const
QMultiMap<Key, T>::const_iterator cbegin() const
QMultiMap<Key, T>::const_iterator cend() const
void clear()
QMultiMap<Key, T>::const_iterator constBegin() const
QMultiMap<Key, T>::const_iterator constEnd() const
QMultiMap<Key, T>::const_iterator constFind(const Key &key) const
QMultiMap<Key, T>::const_iterator constFind(const Key &key, const T &value) const
QMultiMap<Key, T>::const_key_value_iterator constKeyValueBegin() const
QMultiMap<Key, T>::const_key_value_iterator constKeyValueEnd() const
bool contains(const Key &key) const
bool contains(const Key &key, const T &value) const
QMultiMap<Key, T>::size_type count(const Key &key) const
QMultiMap<Key, T>::size_type count(const Key &key, const T &value) const
QMultiMap<Key, T>::size_type count() const
bool empty() const
QMultiMap<Key, T>::iterator end()
QMultiMap<Key, T>::const_iterator end() const
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> equal_range(const Key &key)
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> equal_range(const Key &key) const
QMultiMap<Key, T>::iterator erase(QMultiMap<Key, T>::const_iterator pos)
(since 6.0) QMultiMap<Key, T>::iterator erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)
QMultiMap<Key, T>::iterator find(const Key &key)
QMultiMap<Key, T>::const_iterator find(const Key &key) const
QMultiMap<Key, T>::const_iterator find(const Key &key, const T &value) const
T &first()
const T &first() const
const Key &firstKey() const
QMultiMap<Key, T>::iterator insert(const Key &key, const T &value)
QMultiMap<Key, T>::iterator insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)
bool isEmpty() const
Key key(const T &value, const Key &defaultKey = Key()) const
QMultiMap<Key, T>::key_iterator keyBegin() const
QMultiMap<Key, T>::key_iterator keyEnd() const
QMultiMap<Key, T>::key_value_iterator keyValueBegin()
QMultiMap<Key, T>::const_key_value_iterator keyValueBegin() const
QMultiMap<Key, T>::key_value_iterator keyValueEnd()
QMultiMap<Key, T>::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
QList<Key> keys(const T &value) const
T &last()
const T &last() const
const Key &lastKey() const
QMultiMap<Key, T>::iterator lowerBound(const Key &key)
QMultiMap<Key, T>::const_iterator lowerBound(const Key &key) const
QMultiMap<Key, T>::size_type remove(const Key &key)
QMultiMap<Key, T>::size_type remove(const Key &key, const T &value)
(since 6.1) QMultiMap<Key, T>::size_type removeIf(Predicate pred)
QMultiMap<Key, T>::iterator replace(const Key &key, const T &value)
QMultiMap<Key, T>::size_type size() const
void swap(QMultiMap<Key, T> &other)
T take(const Key &key)
std::multimap<Key, T> toStdMultiMap() const &
QList<Key> uniqueKeys() const
QMultiMap<Key, T> &unite(QMultiMap<Key, T> &&other)
QMultiMap<Key, T> &unite(const QMultiMap<Key, T> &other)
QMultiMap<Key, T>::iterator upperBound(const Key &key)
QMultiMap<Key, T>::const_iterator upperBound(const Key &key) const
T value(const Key &key, const T &defaultValue = T()) const
QList<T> values() const
QList<T> values(const Key &key) const
QMultiMap<Key, T> &operator=(QMultiMap<Key, T> &&other)
QMultiMap<Key, T> &operator=(const QMultiMap<Key, T> &other)
(since 6.1) qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)
bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

Detaillierte Beschreibung

QMultiMap<Key, T> ist eine der generischen Container-Klassen von Qt. Sie speichert (Schlüssel, Wert) Paare und bietet eine schnelle Suche nach dem Schlüssel.

QMultiMap und QMultiHash bieten sehr ähnliche Funktionen. Die Unterschiede sind:

  • QMultiHash QMultiMap bietet durchschnittlich schnellere Suchvorgänge als QMultiMap. (Siehe Algorithmische Komplexität für weitere Einzelheiten).
  • Bei der Iteration über eine QMultiHash sind die Elemente beliebig geordnet. Bei QMultiMap sind die Elemente immer nach Schlüssel sortiert.
  • Der Schlüsseltyp einer QMultiHash muss operator==() und eine globale qHash(Key) Funktion bereitstellen. Der Schlüsseltyp einer QMultiMap muss operator<() bereitstellen, der eine Gesamtreihenfolge angibt. Seit Qt 5.8.1 ist es auch sicher, einen Zeigertyp als Schlüssel zu verwenden, selbst wenn der zugrundeliegende operator<() keine Gesamtreihenfolge angibt.

Hier ist ein Beispiel für eine QMultiMap mit QString keys und int values:

QMultiMap<QString, int> multimap;

Um ein (Schlüssel, Wert) Paar in die MultiMap einzufügen, können Sie insert() verwenden:

multimap.insert("a", 1);
multimap.insert("b", 3);
multimap.insert("c", 7);
multimap.insert("c", -5);

Dies fügt die folgenden drei (Schlüssel, Wert) Paare in die QMultiMap ein: ("a", 1), ("b", 3), ("c", 7), und ("c", -5); beachten Sie, dass doppelte Schlüssel erlaubt sind.

Um einen Wert nachzuschlagen, verwenden Sie find() oder value():

int num2 = multimap.value("a"); // 1
int num3 = multimap.value("thirteen"); // not found; 0
int num3 = 0;
auto it = multimap.constFind("b");
if (it != multimap.cend()) {
    num3 = it.value();
}

Wenn es in der Map kein Element mit dem angegebenen Schlüssel gibt, geben diese Funktionen einen standardmäßig konstruierten Wert zurück.

Wenn Sie prüfen wollen, ob die Map einen bestimmten Schlüssel enthält, verwenden Sie contains():

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

// better:
auto it = multimap.find("TIMEOUT");
if (it != multimap.end())
    timeout = it.value();

Es gibt auch eine Überladung value(), die ihr zweites Argument als Standardwert verwendet, wenn es kein Element mit dem angegebenen Schlüssel gibt:

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

Wenn Sie durch alle in einer QMultiMap gespeicherten (Schlüssel, Wert) Paare navigieren möchten, können Sie einen Iterator verwenden. QMultiMap bietet sowohl Iteratoren im Java-Stil (QMultiMapIterator und QMutableMultiMapIterator) als auch Iteratoren im STL-Stil (QMultiMap::const_iterator und QMultiMap::iterator). Hier sehen Sie, wie Sie mit einem Java-Iterator über eine QMultiMap<QString, int> iterieren:

QMultiMapIterator<QString, int> i(multimap);
while (i.hasNext()) {
    i.next();
    cout << qPrintable(i.key()) << ": " << i.value() << endl;
}

Hier ist derselbe Code, aber diesmal mit einem Iterator im STL-Stil:

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

Die Elemente werden in aufsteigender Reihenfolge der Schlüssel durchlaufen.

Eine QMultiMap erlaubt mehrere Werte pro Schlüssel. Wenn Sie insert() mit einem Schlüssel aufrufen, der bereits in der Map existiert, wird ein neues Paar (Schlüssel, Wert) eingefügt. Ein Beispiel:

multimap.insert("plenty", 100);
multimap.insert("plenty", 2000);
// multimap.size() == 2

Wenn Sie alle Werte für einen einzigen Schlüssel abrufen möchten, können Sie values(const Key &key) verwenden, das eine QList<T> zurückgibt:

QList<int> values = multimap.values("plenty");
for (auto i : std::as_const(values))
    cout << i << endl;

Die Elemente, die denselben Schlüssel haben, sind von den zuletzt eingefügten bis zu den am wenigsten eingefügten verfügbar. Ein anderer Ansatz besteht darin, find() aufzurufen, um den STL-artigen Iterator für das erste Element mit einem Schlüssel zu erhalten und von dort aus zu iterieren:

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

Wenn Sie nur die Werte aus einer Map extrahieren müssen (nicht die Schlüssel), können Sie auch bereichsbasierte für verwenden:

QMap<QString, int> multimap;
...
for (int value : std::as_const(multimap))
    cout << value << endl;

Elemente können auf verschiedene Weise aus der Multimap entfernt werden. Eine Möglichkeit besteht darin, remove() aufzurufen; dadurch wird jedes Element mit dem angegebenen Schlüssel entfernt. Eine andere Möglichkeit ist die Verwendung von QMutableMultiMapIterator::remove(). Darüber hinaus können Sie die gesamte Karte mit clear() löschen.

Es ist möglich, zwei Multi-Maps durch den Aufruf von unite(), durch die Verwendung von operator+() und durch die Verwendung von operator+=() zusammenzuführen. Beispiel:

QMultiMap<QString, int> map1, map2, map3;

map1.insert("plenty", 100);
map1.insert("plenty", 2000);
// map1.size() == 2

map2.insert("plenty", 5000);
// map2.size() == 1

map3 = map1 + map2;
// map3.size() == 3

Die Schlüssel- und Wert-Datentypen von QMultiMap müssen zuweisbare Datentypen sein. Dies deckt die meisten Datentypen ab, die Sie wahrscheinlich antreffen werden, aber der Compiler lässt es nicht zu, dass Sie z. B. QWidget als Wert speichern; speichern Sie stattdessen einen QWidget *. Darüber hinaus muss der Schlüsseltyp von QMultiMap den Operator<() bereitstellen. QMap verwendet ihn, um seine Elemente sortiert zu halten, und nimmt an, dass zwei Schlüssel x und y gleich sind, wenn weder x < y noch y < x wahr ist.

Beispiel:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

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

private:
    QString myName;
    QDate myDateOfBirth;
};

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

#endif // EMPLOYEE_H

In diesem Beispiel werden zunächst die Namen der Mitarbeiter verglichen. Wenn sie gleich sind, vergleichen wir ihre Geburtsdaten, um den Gleichstand aufzuheben.

Siehe auch QMultiMapIterator, QMutableMultiMapIterator, und QMultiHash.

Dokumentation der Mitgliedstypen

QMultiMap::ConstIterator

Qt-style ist ein Synonym für QMultiMap::const_iterator.

QMultiMap::Iterator

Qt-style ist ein Synonym für QMultiMap::iterator.

QMultiMap::const_key_value_iterator

Der QMultiMap::const_key_value_iterator-Typ bietet einen STL-artigen Iterator für QMultiMap.

QMultiMap::const_key_value_iterator ist im Wesentlichen dasselbe wie QMultiMap::const_iterator mit dem Unterschied, dass operator*() ein Schlüssel/Wert-Paar statt eines Wertes zurückgibt.

Siehe auch QKeyValueIterator.

[alias] QMultiMap::difference_type

Typendefinition für ptrdiff_t. Aus Gründen der STL-Kompatibilität bereitgestellt.

[alias] QMultiMap::key_type

Typedef für Key. Aus Gründen der STL-Kompatibilität bereitgestellt.

QMultiMap::key_value_iterator

Der QMultiMap::key_value_iterator-Typ bietet einen STL-artigen Iterator für QMultiMap.

QMultiMap::key_value_iterator ist im Wesentlichen dasselbe wie QMultiMap::iterator mit dem Unterschied, dass operator*() ein Schlüssel/Wert-Paar statt eines Wertes zurückgibt.

Siehe auch QKeyValueIterator.

[alias] QMultiMap::mapped_type

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

[alias] QMultiMap::size_type

Typendefinition für int. Aus Gründen der STL-Kompatibilität zur Verfügung gestellt.

Dokumentation der Mitgliedsfunktionen

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

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

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

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

Gibt ein Bereichsobjekt zurück, das die Iteration über diese Multimap als Schlüssel/Wertpaare ermöglicht. Dieses Bereichsobjekt kann zum Beispiel in einer bereichsbasierten for-Schleife in Kombination mit einer strukturierten Bindungsdeklaration verwendet werden:

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

for (auto [key, value] : map.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 erhalten werden, Verweise auf die Werte in der Multi-Map sind. Insbesondere wird durch die Änderung des Wertes auch die Map selbst geändert.

Diese Funktion wurde in Qt 6.4 eingeführt.

Siehe auch QKeyValueIterator.

QMultiMap::QMultiMap()

Konstruiert eine leere Multimap.

Siehe auch clear().

[explicit, since 6.0] QMultiMap::QMultiMap(QMap<Key, T> &&other)

Wenn other gemeinsam genutzt wird, wird eine Multi-Map als Kopie von other konstruiert. Andernfalls wird eine Multi-Map konstruiert, indem die Elemente von other verschoben werden.

Diese Funktion wurde in Qt 6.0 eingeführt.

[explicit, since 6.0] QMultiMap::QMultiMap(const QMap<Key, T> &other)

Konstruiert eine Multi-Map als Kopie von other.

Diese Funktion wurde in Qt 6.0 eingeführt.

[explicit] QMultiMap::QMultiMap(const std::multimap<Key, T> &other)

Konstruiert eine Kopie von other.

Siehe auch toStdMultiMap().

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

Konstruiert eine Multimap mit einer Kopie von jedem der Elemente in der Initialisierungsliste list.

[explicit] QMultiMap::QMultiMap(std::multimap<Key, T> &&other)

Konstruiert eine Multikarte durch Verschieben von other.

Siehe auch toStdMultiMap().

[default] QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)

Konstruiert eine Kopie von other.

Dieser Vorgang erfolgt in konstanter Zeit, da QMultiMap implizit gemeinsam genutzt wird. Dies macht die Rückgabe einer QMultiMap aus einer Funktion sehr schnell. Wenn eine gemeinsam genutzte Instanz geändert wird, wird sie kopiert (copy-on-write), was lineare Zeit benötigt.

Siehe auch operator=().

[default] QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)

Move-konstruiert eine QMultiMap-Instanz, die auf das gleiche Objekt zeigt, auf das other gezeigt hat.

[default] QMultiMap::~QMultiMap()

Zerstört die Multimap. Verweise auf die Werte in der Multimap und alle Iteratoren über diese Multimap werden ungültig.

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

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

Siehe auch constBegin() und end().

QMultiMap<Key, T>::const_iterator QMultiMap::begin() const

Dies ist eine überladene Funktion.

QMultiMap<Key, T>::const_iterator QMultiMap::cbegin() const

Gibt einen const STL-artigen Iterator zurück, der auf das erste Element in der Multimap zeigt.

Siehe auch begin() und cend().

QMultiMap<Key, T>::const_iterator QMultiMap::cend() const

Gibt einen const STL-artigen Iterator zurück, der auf das imaginäre Element nach dem letzten Element in der Multimap zeigt.

Siehe auch cbegin() und end().

void QMultiMap::clear()

Entfernt alle Elemente aus der Multimap.

Siehe auch remove().

QMultiMap<Key, T>::const_iterator QMultiMap::constBegin() const

Gibt einen const STL-artigen Iterator zurück, der auf das erste Element in der Multimap zeigt.

Siehe auch begin() und constEnd().

QMultiMap<Key, T>::const_iterator QMultiMap::constEnd() const

Gibt einen const STL-artigen Iterator zurück, der auf das imaginäre Element nach dem letzten Element in der Multimap zeigt.

Siehe auch constBegin() und end().

QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key) const

Gibt einen const-Iterator zurück, der auf das Element mit dem Schlüssel key in der Multimap zeigt.

Wenn die Multimap kein Element mit dem Schlüssel key enthält, gibt die Funktion constEnd() zurück.

Siehe auch find() und QMultiMap::constFind().

QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const

Gibt einen Iterator zurück, der auf das Element mit dem Schlüssel key und dem Wert value in der Map zeigt.

Enthält die Map kein solches Element, gibt die Funktion constEnd() zurück.

Siehe auch QMap::constFind().

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueBegin() const

Gibt einen const STL-artigen Iterator zurück, der auf den ersten Eintrag in der Multimap zeigt.

Siehe auch keyValueBegin().

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueEnd() const

Gibt einen const STL-artigen Iterator zurück, der auf den imaginären Eintrag nach dem letzten Eintrag in der Multimap zeigt.

Siehe auch constKeyValueBegin().

bool QMultiMap::contains(const Key &key) const

Gibt true zurück, wenn die Multimap ein Element mit dem Schlüssel key enthält; andernfalls wird false zurückgegeben.

Siehe auch count().

bool QMultiMap::contains(const Key &key, const T &value) const

Gibt true zurück, wenn die Multimap ein Element mit dem Schlüssel key und dem Wert value enthält; andernfalls wird false zurückgegeben.

Siehe auch count().

QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key) const

Gibt die Anzahl der Elemente zurück, die dem Schlüssel key zugeordnet sind.

Siehe auch contains() und QMultiMap::count().

QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key, const T &value) const

Gibt die Anzahl der Elemente mit dem Schlüssel key und dem Wert value zurück.

Siehe auch contains() und QMultiMap::count().

QMultiMap<Key, T>::size_type QMultiMap::count() const

Dies ist eine überladene Funktion.

Dasselbe wie size().

bool QMultiMap::empty() const

Diese Funktion ist aus Gründen der STL-Kompatibilität vorgesehen. Sie ist äquivalent zu isEmpty() und gibt true zurück, wenn die Karte leer ist; andernfalls gibt sie false zurück.

QMultiMap<Key, T>::iterator QMultiMap::end()

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

Siehe auch begin() und constEnd().

QMultiMap<Key, T>::const_iterator QMultiMap::end() const

Dies ist eine überladene Funktion.

std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> QMultiMap::equal_range(const Key &key)

Gibt ein Paar von Iteratoren zurück, die den Wertebereich [first, second) abgrenzen, der unter key gespeichert ist.

std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> QMultiMap::equal_range(const Key &key) const

Dies ist eine überladene Funktion.

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

Entfernt das Paar (Schlüssel, Wert), auf das der Iterator pos zeigt, aus der Multi Map und gibt einen Iterator zum nächsten Element in der Map zurück.

Hinweis: Der Iterator pos muss gültig und dereferenzierbar sein.

Siehe auch remove().

[since 6.0] QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)

Entfernt die Paare (Schlüssel, Wert), auf die der Iteratorbereich [first, last) zeigt, aus der Multi-Map. Gibt einen Iterator zu dem Element in der Multi-Map zurück, das auf das letzte entfernte Element folgt.

Hinweis: Der Bereich [first, last) muss ein gültiger Bereich in *this sein.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch remove().

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

Gibt einen Iterator zurück, der auf das Element mit dem Schlüssel key in der Multimap zeigt.

Wenn die Multimap kein Element mit dem Schlüssel key enthält, gibt die Funktion end() zurück.

Enthält die Map mehrere Elemente 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 zum Beispiel ein Code, der über alle Elemente mit demselben Schlüssel iteriert:

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

Siehe auch constFind(), value(), values(), lowerBound(), und upperBound().

QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key) const

Dies ist eine überladene Funktion.

QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const

Dies ist eine überladene Funktion.

Gibt einen konstanten Iterator zurück, der auf das Element mit den angegebenen key und value in der Map zeigt.

Wenn die Map kein solches Element enthält, gibt die Funktion end() zurück.

Wenn die Map mehrere Elemente mit dem angegebenen key enthält, gibt diese Funktion einen konstanten Iterator zurück, der auf den zuletzt eingefügten Wert zeigt.

T &QMultiMap::first()

Gibt einen Verweis auf den ersten Wert in der Multimap zurück, d. h. den Wert, der dem kleinsten Schlüssel zugeordnet ist. Diese Funktion geht davon aus, dass die Multimap nicht leer ist.

Wenn unshared (oder const version) aufgerufen wird, wird sie in konstanter Zeit ausgeführt.

Siehe auch last(), firstKey(), und isEmpty().

const T &QMultiMap::first() const

Dies ist eine überladene Funktion.

const Key &QMultiMap::firstKey() const

Gibt einen Verweis auf den kleinsten Schlüssel in der Multimap zurück. Diese Funktion geht davon aus, dass die Multimap nicht leer ist.

Sie wird in konstanter Zeit ausgeführt.

Siehe auch lastKey(), first(), keyBegin(), und isEmpty().

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

Fügt ein neues Element mit dem Schlüssel key und einem Wert von value ein.

Wenn bereits ein Element mit demselben Schlüssel in der Karte vorhanden ist, wird mit dieser Funktion einfach ein neues Element erstellt. (Dieses Verhalten unterscheidet sich von replace(), das den Wert eines vorhandenen Elements überschreibt).

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

Siehe auch replace().

QMultiMap<Key, T>::iterator QMultiMap::insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)

Dies ist eine überladene Funktion.

Fügt ein neues Element mit dem Schlüssel key und dem Wert value und mit dem Hinweis pos ein, der angibt, wo die Einfügung erfolgen soll.

Wenn constBegin() als Hinweis verwendet wird, bedeutet dies, dass key kleiner ist als ein beliebiger Schlüssel in der Multimap, während constEnd() darauf hindeutet, dass key (unbedingt) größer ist als ein beliebiger Schlüssel in der Multimap. Ansonsten sollte der Hinweis die Bedingung (pos - 1) erfüllen.key() < key <= pos.key(). Wenn der Hinweis pos falsch ist, wird er ignoriert und eine reguläre Einfügung durchgeführt.

Wenn der Hinweis korrekt ist und die Multimap nicht gemeinsam genutzt wird, wird das Einfügen in amortisierter konstanter Zeit ausgeführt.

Wenn bereits ein Element mit demselben Schlüssel in der Map vorhanden ist, erstellt diese Funktion einfach ein neues Element.

Bei der Erstellung einer Multi-Map aus sortierten Daten ist das Einfügen des größten Schlüssels zuerst mit constBegin() schneller als das Einfügen in sortierter Reihenfolge mit constEnd(), da constEnd() - 1 (das benötigt wird, um zu prüfen, ob der Hinweis gültig ist) logarithmische Zeit benötigt.

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

Hinweis: Seien Sie vorsichtig mit dem Hint. Die Bereitstellung eines Iterators aus einer älteren gemeinsamen Instanz könnte zum Absturz führen, aber es besteht auch das Risiko, dass sowohl die Multimap als auch die pos Multimap unbemerkt beschädigt werden.

bool QMultiMap::isEmpty() const

Gibt true zurück, wenn die Multimap keine Elemente enthält; andernfalls wird false zurückgegeben.

Siehe auch size().

Key QMultiMap::key(const T &value, const Key &defaultKey = Key()) const

Dies ist eine überladene Funktion.

Gibt den ersten Schlüssel mit dem Wert value zurück, oder defaultKey, wenn die Multimap kein Element mit dem Wert value enthält. Wenn kein defaultKey angegeben wird, gibt die Funktion einen standardmäßig konstruierten Schlüssel zurück.

Diese Funktion kann langsam sein(lineare Zeit), da die interne Datenstruktur von QMultiMap für die schnelle Suche nach dem Schlüssel, nicht nach dem Wert, optimiert ist.

Siehe auch value() und keys().

QMultiMap<Key, T>::key_iterator QMultiMap::keyBegin() const

Gibt einen const STL-artigen Iterator zurück, der auf den ersten Schlüssel in der Multimap zeigt.

Siehe auch keyEnd() und firstKey().

QMultiMap<Key, T>::key_iterator QMultiMap::keyEnd() const

Gibt einen const STL-artigen Iterator zurück, der auf das imaginäre Element nach dem letzten Schlüssel in der Multimap zeigt.

Siehe auch keyBegin() und lastKey().

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

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

Siehe auch keyValueEnd().

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueBegin() const

Gibt einen const STL-artigen Iterator zurück, der auf den ersten Eintrag in der Multimap zeigt.

Siehe auch keyValueEnd().

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

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

Siehe auch keyValueBegin().

QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueEnd() const

Gibt einen const STL-artigen Iterator zurück, der auf den imaginären Eintrag nach dem letzten Eintrag in der Multimap zeigt.

Siehe auch keyValueBegin().

QList<Key> QMultiMap::keys() const

Gibt eine Liste zurück, die alle Schlüssel der Multimap in aufsteigender Reihenfolge enthält. Schlüssel, die mehrfach in der Multimap vorkommen, kommen auch mehrfach in der Liste vor.

Die Reihenfolge ist garantiert dieselbe wie bei values().

Diese Funktion erstellt eine neue Liste in linearer Zeit. Der damit verbundene Zeit- und Speicherbedarf kann durch Iteration von keyBegin() zu keyEnd() vermieden werden.

Siehe auch values() und key().

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

Dies ist eine überladene Funktion.

Gibt eine Liste zurück, die alle mit dem Wert value verbundenen Schlüssel in aufsteigender Reihenfolge enthält.

Diese Funktion kann langsam sein(lineare Zeit), da die interne Datenstruktur von QMultiMap für schnelles Nachschlagen nach Schlüssel und nicht nach Wert optimiert ist.

T &QMultiMap::last()

Gibt einen Verweis auf den letzten Wert in der Multimap zurück, d. h. den Wert, der dem größten Schlüssel zugeordnet ist. Diese Funktion geht davon aus, dass die Map nicht leer ist.

Wenn unshared (oder die const-Version) aufgerufen wird, wird sie in logarithmischer Zeit ausgeführt.

Siehe auch first(), lastKey(), und isEmpty().

const T &QMultiMap::last() const

Dies ist eine überladene Funktion.

const Key &QMultiMap::lastKey() const

Gibt einen Verweis auf den größten Schlüssel in der Multimap zurück. Diese Funktion geht davon aus, dass die Multimap nicht leer ist.

Sie wird in logarithmischer Zeit ausgeführt.

Siehe auch firstKey(), last(), keyEnd(), und isEmpty().

QMultiMap<Key, T>::iterator QMultiMap::lowerBound(const Key &key)

Gibt einen Iterator zurück, der auf das erste Element mit dem Schlüssel key in der Karte zeigt. Wenn die Map kein Element mit dem Schlüssel key enthält, gibt die Funktion einen Iterator zurück, der auf das nächstgelegene Element mit einem größeren Schlüssel zeigt.

Beispiel:

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.lowerBound(0);      // returns iterator to (1, "one")
multimap.lowerBound(1);      // returns iterator to (1, "one")
multimap.lowerBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.lowerBound(10);     // returns iterator to (10, "ten")
multimap.lowerBound(999);    // returns end()

Wenn die Map mehrere Elemente mit dem Schlüssel key enthält, 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 zum Beispiel ein Code, der alle Elemente mit demselben Schlüssel durchläuft:

QMap<QString, int> multimap;
...
QMap<QString, int>::const_iterator i = multimap.lowerBound("HDR");
QMap<QString, int>::const_iterator upperBound = multimap.upperBound("HDR");
while (i != upperBound) {
    cout << i.value() << endl;
    ++i;
}

Siehe auch upperBound() und find().

QMultiMap<Key, T>::const_iterator QMultiMap::lowerBound(const Key &key) const

Dies ist eine überladene Funktion.

QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key)

Entfernt alle Elemente, die den Schlüssel key haben, aus der Multimap. Gibt die Anzahl der entfernten Elemente zurück.

Siehe auch clear() und take().

QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key, const T &value)

Entfernt alle Elemente, die den Schlüssel key und den Wert value haben, aus der Multimap. Gibt die Anzahl der entfernten Elemente zurück.

Siehe auch clear() und take().

[since 6.1] template <typename Predicate> QMultiMap<Key, T>::size_type QMultiMap::removeIf(Predicate pred)

Entfernt alle Elemente, für die das Prädikat pred den Wert true liefert, aus der Multimap.

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

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

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch clear() und take().

QMultiMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)

Fügt ein neues Element mit dem Schlüssel key und einem Wert von value ein.

Wenn es bereits ein Element mit dem Schlüssel key gibt, wird der Wert dieses Elements durch value ersetzt.

Wenn es mehrere Elemente mit dem Schlüssel key gibt, wird der Wert des zuletzt eingefügten Elements durch value ersetzt.

Gibt einen Iterator zurück, der auf das neue/aktualisierte Element zeigt.

Siehe auch insert().

QMultiMap<Key, T>::size_type QMultiMap::size() const

Gibt die Anzahl der (Schlüssel, Wert)-Paare in der Multi-Map zurück.

Siehe auch isEmpty() und count().

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

Tauscht diese Multikarte mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.

T QMultiMap::take(const Key &key)

Entfernt das Element mit dem Schlüssel key aus der Multimap und gibt den damit verbundenen Wert zurück.

Wenn das Element nicht in der Multimap vorhanden ist, gibt die Funktion einfach einen standardmäßig konstruierten Wert zurück. Wenn mehrere Elemente für key in der Map vorhanden sind, wird nur das zuletzt eingefügte entfernt und zurückgegeben.

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

Siehe auch remove().

std::multimap<Key, T> QMultiMap::toStdMultiMap() const &

Gibt eine STL-Multimap zurück, die dieser QMultiMap entspricht.

QList<Key> QMultiMap::uniqueKeys() const

Gibt eine Liste mit allen Schlüsseln in der Map in aufsteigender Reihenfolge zurück. Schlüssel, die in der Map mehrfach vorkommen, erscheinen nur einmal in der zurückgegebenen Liste.

QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)

Verschiebt alle Elemente aus der Map other in diese Map. Wenn ein Schlüssel beiden Maps gemeinsam ist, enthält die resultierende Map den Schlüssel mehrfach.

Wenn other gemeinsam ist, werden die Elemente stattdessen kopiert.

QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)

Fügt alle Elemente aus der Map other in diese Map ein. Wenn ein Schlüssel in beiden Maps vorkommt, enthält die resultierende Map den Schlüssel mehrfach.

QMultiMap<Key, T>::iterator QMultiMap::upperBound(const Key &key)

Gibt einen Iterator zurück, der auf das Element zeigt, das unmittelbar auf das letzte Element mit dem Schlüssel key in der Map folgt. Wenn die Map kein Element mit dem Schlüssel key enthält, gibt die Funktion einen Iterator zurück, der auf das nächstgelegene Element mit einem größeren Schlüssel zeigt.

Beispiel:

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.upperBound(0);      // returns iterator to (1, "one")
multimap.upperBound(1);      // returns iterator to (5, "five")
multimap.upperBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five (2)")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.upperBound(10);     // returns end()
multimap.upperBound(999);    // returns end()

Siehe auch lowerBound() und find().

QMultiMap<Key, T>::const_iterator QMultiMap::upperBound(const Key &key) const

Dies ist eine überladene Funktion.

T QMultiMap::value(const Key &key, const T &defaultValue = T()) const

Gibt den Wert zurück, der mit dem Schlüssel key verknüpft ist.

Wenn die Multimap kein Element mit dem Schlüssel key enthält, gibt die Funktion defaultValue zurück. Wenn kein defaultValue angegeben ist, gibt die Funktion einen standardmäßig konstruierten Wert zurück. Gibt es mehrere Elemente für key in der Multi-Map, wird der Wert des zuletzt eingefügten Elements zurückgegeben.

Siehe auch key(), values(), und contains().

QList<T> QMultiMap::values() const

Gibt eine Liste zurück, die alle Werte in der Map enthält, in aufsteigender Reihenfolge ihrer Schlüssel. Wenn ein Schlüssel mit mehreren Werten verknüpft ist, werden alle seine Werte in der Liste aufgeführt, nicht nur der zuletzt eingefügte Wert.

Siehe auch keys() und value().

QList<T> QMultiMap::values(const Key &key) const

Gibt eine Liste mit allen Werten zurück, die dem Schlüssel key zugeordnet sind, und zwar vom zuletzt eingefügten bis zum zuletzt eingefügten Wert.

Siehe auch keys() und value().

[default] QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)

Verschieben - weist other dieser QMultiMap Instanz zu.

[default] QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)

Weist other dieser Multikarte zu und gibt einen Verweis auf diese Multikarte zurück.

Verwandte Nicht-Mitglieder

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

Entfernt alle Elemente, für die das Prädikat pred den Wert true liefert, aus der Multimap map.

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

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

Diese Funktion wurde in Qt 6.1 eingeführt.

bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Gibt true zurück, wenn lhs nicht gleich rhs ist; andernfalls gibt es false zurück.

Zwei Multi-Maps gelten als gleich, wenn sie dieselben (Schlüssel-, Wert-)Paare in derselben Reihenfolge enthalten (was für doppelte Schlüssel wichtig ist).

Diese Funktion erfordert, dass die Schlüssel- und Werttypen operator==() implementieren.

Siehe auch operator==().

template <typename Key, typename T> QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Gibt eine Map zurück, die alle Elemente in der Map lhs und zusätzlich alle Elemente in rhs enthält. Wenn ein Schlüssel in beiden Maps vorkommt, enthält die resultierende Map den Schlüssel mehrfach.

Siehe auch operator+=().

template <typename Key, typename T> QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Fügt alle Elemente der Karte rhs in die Karte lhs ein und gibt die resultierende Karte zurück.

Siehe auch insert() und operator+().

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)

Schreibt die Multi-Map map in den Stream out.

Diese Funktion erfordert die Implementierung der Schlüssel- und Werttypen operator<<().

Siehe auch Format der QDataStream-Operatoren.

bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Gibt true zurück, wenn lhs gleich rhs ist; andernfalls wird false zurückgegeben.

Zwei Multi-Maps werden als gleich angesehen, wenn sie die gleichen (Schlüssel, Wert) Paare in der gleichen Reihenfolge enthalten (was für doppelte Schlüssel wichtig ist).

Diese Funktion erfordert, dass die Schlüssel- und Werttypen operator==() implementieren.

Siehe auch operator!=().

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

Liest eine Karte aus dem Stream in in map.

Für diese Funktion müssen die Schlüssel- und Werttypen operator>>() implementiert werden.

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.