QMultiMap Class
template <typename Key, typename T> class QMultiMapLa classe QMultiMap est une classe modèle qui fournit un tableau associatif avec plusieurs clés équivalentes. Plus d'informations...
| En-tête : | #include <QMultiMap> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
- Liste de tous les membres, y compris les membres hérités
- Membres dépréciés
- QMultiMap fait partie des classes partagées implicitement.
Cette classe est comparable à l'égalité.
Note : Toutes les fonctions de cette classe sont réentrantes.
Types publics
| class | const_iterator |
| class | iterator |
| class | key_iterator |
| ConstIterator | |
| Iterator | |
| const_key_value_iterator | |
| difference_type | |
| key_type | |
| key_value_iterator | |
| mapped_type | |
| size_type |
Fonctions publiques
| 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) |
Non-membres apparentés
(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) |
Description détaillée
QMultiMap<Key, T> est l'une des classes de conteneurs génériques de Qt. Elle stocke des paires (clé, valeur) et permet une consultation rapide par clé.
QMultiMap et QMultiHash offrent des fonctionnalités très similaires. Les différences sont les suivantes
- QMultiHash QMultiMap fournit des recherches en moyenne plus rapides que QMultiMap. (Voir la complexité algorithmique pour plus de détails).
- Lors de l'itération sur un site QMultiHash, les éléments sont ordonnés de manière arbitraire. Avec QMultiMap, les éléments sont toujours triés par clé.
- Le type de clé d'un QMultiHash doit fournir operator==() et une fonction globale qHash(Key). Le type de clé d'une QMultiMap doit fournir operator<() spécifiant un ordre total. Depuis Qt 5.8.1, il est également possible d'utiliser un pointeur comme clé, même si l'opérateur<() sous-jacent ne fournit pas d'ordre total.
Voici un exemple de QMultiMap avec QString clés et int valeurs :
Pour insérer une paire (clé, valeur) dans la carte multi, vous pouvez utiliser insert() :
multimap.insert("a", 1); multimap.insert("b", 3); multimap.insert("c", 7); multimap.insert("c", -5);
Cela permet d'insérer les quatre paires (clé, valeur) suivantes dans la QMultiMap : ("a", 1), ("b", 3), ("c", 7) et ("c", -5) ; notez que les clés dupliquées sont autorisées.
Pour rechercher une valeur, utilisez find() ou value() :
int num2 = multimap.value("a"); // 1 int num3 = multimap.value("thirteen"); // not found; 0 auto it = multimap.constFind("b"); if (it != multimap.cend()) { num3 = it.value(); }
S'il n'y a pas d'élément avec la clé spécifiée dans la carte, ces fonctions renvoient une valeur construite par défaut.
Si vous souhaitez vérifier si la carte contient une certaine clé, utilisez 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();
Il existe également une surcharge value() qui utilise son deuxième argument comme valeur par défaut s'il n'y a pas d'élément avec la clé spécifiée :
int timeout = multimap.value("TIMEOUT", 30);
Si vous souhaitez parcourir toutes les paires (clé, valeur) stockées dans une QMultiMap, vous pouvez utiliser un itérateur. QMultiMap fournit des itérateurs de style Java (QMultiMapIterator et QMutableMultiMapIterator) et des itérateurs de style STL (QMultiMap::const_iterator et QMultiMap::iterator). Voici comment itérer sur une QMultiMap<QString, int> à l'aide d'un itérateur de style Java :
QMultiMapIterator<QString, int> i(multimap); while (i.hasNext()) { i.next(); cout << qPrintable(i.key()) << ": " << i.value() << endl; }
Voici le même code, mais en utilisant cette fois un itérateur de type STL :
for (auto i = multimap.cbegin(), end = multimap.cend(); i != end; ++i) cout << qPrintable(i.key()) << ": " << i.value() << endl;
Les éléments sont parcourus dans l'ordre croissant des clés.
Une QMultiMap permet d'utiliser plusieurs valeurs par clé. Si vous appelez insert() avec une clé qui existe déjà dans la carte, une nouvelle paire (clé, valeur) sera insérée. Par exemple :
multimap.insert("plenty", 100); multimap.insert("plenty", 2000); // multimap.size() == 2
Si vous souhaitez récupérer toutes les valeurs d'une seule clé, vous pouvez utiliser values(const Key &key), qui renvoie un QList<T> :
QList<int> values = multimap.values("plenty"); for (auto i : std::as_const(values)) cout << i << endl;
Les éléments qui partagent la même clé sont disponibles du plus récemment inséré au moins récemment inséré. Une autre approche consiste à appeler find() pour obtenir l'itérateur de style STL pour le premier élément avec une clé et à itérer à partir de là :
auto i = multimap.find("plenty"); while (i != multimap.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; }
Si vous ne devez extraire que les valeurs d'une carte (et non les clés), vous pouvez également utiliser la méthode "range-based for" :
Les éléments peuvent être supprimés de la carte multi de plusieurs façons. L'une d'entre elles consiste à appeler remove(), ce qui a pour effet de supprimer tout élément correspondant à la clé donnée. Une autre méthode consiste à utiliser QMutableMultiMapIterator::remove(). En outre, vous pouvez effacer toute la carte en utilisant clear().
Il est possible de fusionner deux cartes multiples en appelant unite(), en utilisant operator+() et en utilisant operator+=(). Exemple :
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
Les types de données clé et valeur de QMultiMap doivent être des types de données assignables. Cela couvre la plupart des types de données que vous êtes susceptible de rencontrer, mais le compilateur ne vous laissera pas, par exemple, stocker un QWidget en tant que valeur ; à la place, stockez un QWidget *. En outre, le type de clé de QMultiMap doit fournir operator<(). QMap l'utilise pour garder ses éléments triés et suppose que deux clés x et y sont égales si ni x < y ni y < x n'est vrai.
Exemple :
#ifndef EMPLOYEE_H #define EMPLOYEE_H class Employee { public: Employee() {} Employee(const QString &name, QDate dateOfBirth); QString name() const { return myName; } QDate dateOfBirth() const { return myDateOfBirth; } //... private: QString myName; QDate myDateOfBirth; }; inline bool operator<(const Employee &e1, const Employee &e2) { if (e1.name() != e2.name()) return e1.name() < e2.name(); return e1.dateOfBirth() < e2.dateOfBirth(); } #endif // EMPLOYEE_H
Dans l'exemple, nous commençons par comparer les noms des employés. S'ils sont égaux, nous comparons leurs dates de naissance pour les départager.
Voir également QMultiMapIterator, QMutableMultiMapIterator, et QMultiHash.
Documentation sur les types de membres
QMultiMap::ConstIterator
Qt-style synonyme de QMultiMap::const_iterator.
QMultiMap::Iterator
Qt-style synonyme de QMultiMap::iterator.
QMultiMap::const_key_value_iterator
Le typedef QMultiMap::const_key_value_iterator fournit un itérateur de style STL pour QMultiMap.
QMultiMap::const_key_value_iterator est essentiellement le même que QMultiMap::const_iterator à la différence que operator*() renvoie une paire clé/valeur au lieu d'une valeur.
Voir également QKeyValueIterator.
[alias] QMultiMap::difference_type
Typedef pour ptrdiff_t. Fourni pour la compatibilité STL.
[alias] QMultiMap::key_type
Typedef pour Key. Fourni pour la compatibilité STL.
QMultiMap::key_value_iterator
Le typage QMultiMap::key_value_iterator fournit un itérateur de style STL pour QMultiMap.
QMultiMap::key_value_iterator est essentiellement le même que QMultiMap::iterator à la différence que operator*() renvoie une paire clé/valeur au lieu d'une valeur.
Voir également QKeyValueIterator.
[alias] QMultiMap::mapped_type
Typedef pour T. Fourni pour la compatibilité STL.
[alias] QMultiMap::size_type
Typedef pour int. Fourni pour la compatibilité STL.
Documentation des fonctions membres
QMultiMap::QMultiMap()
Construit une carte multi vide.
Voir aussi clear().
[explicit, since 6.0] QMultiMap::QMultiMap(QMap<Key, T> &&other)
Si other est partagé, construit une carte multi en tant que copie de other. Sinon, construit une carte multi en déplaçant les éléments de other.
Cette fonction a été introduite dans Qt 6.0.
[explicit, since 6.0] QMultiMap::QMultiMap(const QMap<Key, T> &other)
Construit une carte multi en tant que copie de other.
Cette fonction a été introduite dans Qt 6.0.
[explicit] QMultiMap::QMultiMap(const std::multimap<Key, T> &other)
Construit une copie de other.
Voir aussi toStdMultiMap().
QMultiMap::QMultiMap(std::initializer_list<std::pair<Key, T>> list)
Construit une carte multi avec une copie de chacun des éléments de la liste d'initialisation list.
[explicit] QMultiMap::QMultiMap(std::multimap<Key, T> &&other)
Construit une carte multiple en se déplaçant à partir de other.
Voir aussi toStdMultiMap().
[default] QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)
Construit une copie de other.
Cette opération se produit en temps constant, car QMultiMap est implicitement partagé. Cela rend le retour d'une QMultiMap à partir d'une fonction très rapide. Si une instance partagée est modifiée, elle sera copiée (copy-on-write), ce qui prend un temps linéaire.
Voir également operator=().
[default] QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)
Move-construit une instance de QMultiMap, en la faisant pointer sur le même objet que other.
[default] QMultiMap::~QMultiMap()
Détruit la multi-carte. Les références aux valeurs de la multi-carte et tous les itérateurs sur cette multi-carte deviennent invalides.
[since 6.4] auto QMultiMap::asKeyValueRange() &
[since 6.4] auto QMultiMap::asKeyValueRange() const &
[since 6.4] auto QMultiMap::asKeyValueRange() &&
[since 6.4] auto QMultiMap::asKeyValueRange() const &&
Renvoie un objet de plage qui permet d'itérer sur cette carte multiple sous forme de paires clé/valeur. Par exemple, cet objet plage peut être utilisé dans une boucle for basée sur la plage, en combinaison avec une déclaration de liaison structurée :
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 }
Notez que la clé et la valeur obtenues de cette manière sont des références à celles de la multi-carte. Plus précisément, la modification de la valeur modifiera la carte elle-même.
Ces fonctions ont été introduites dans Qt 6.4.
Voir aussi QKeyValueIterator.
QMultiMap<Key, T>::iterator QMultiMap::begin()
Renvoie un itérateur de style STL pointant sur le premier élément de la carte multi.
Voir aussi constBegin() et end().
QMultiMap<Key, T>::const_iterator QMultiMap::begin() const
Il s'agit d'une fonction surchargée.
QMultiMap<Key, T>::const_iterator QMultiMap::cbegin() const
Renvoie un itérateur constant de style STL pointant vers le premier élément de la carte multi.
QMultiMap<Key, T>::const_iterator QMultiMap::cend() const
Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après le dernier élément de la carte multi.
void QMultiMap::clear()
Supprime tous les éléments de la carte multi.
Voir aussi remove().
QMultiMap<Key, T>::const_iterator QMultiMap::constBegin() const
Renvoie un itérateur constant de style STL pointant vers le premier élément de la carte multi.
Voir aussi begin() et constEnd().
QMultiMap<Key, T>::const_iterator QMultiMap::constEnd() const
Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après le dernier élément de la carte multi.
Voir aussi constBegin() et end().
QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key) const
Renvoie un itérateur constant pointant vers l'élément avec la clé key dans la carte multi.
Si la carte multi ne contient aucun élément avec la clé key, la fonction renvoie constEnd().
Voir aussi find() et QMultiMap::constFind(const Key &key, const T &value).
QMultiMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const
Renvoie un itérateur pointant vers l'élément ayant la clé key et la valeur value dans la carte.
Si la carte ne contient aucun élément de ce type, la fonction renvoie constEnd().
Voir aussi QMap::constFind().
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueBegin() const
Renvoie un itérateur constant de style STL pointant vers la première entrée de la carte multi.
Voir aussi keyValueBegin().
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::constKeyValueEnd() const
Renvoie un itérateur constant de style STL pointant vers l'entrée imaginaire située après la dernière entrée de la carte multi.
Voir aussi constKeyValueBegin().
bool QMultiMap::contains(const Key &key) const
Renvoie true si la carte multi contient un élément avec la clé key; sinon, renvoie false.
Voir aussi count().
bool QMultiMap::contains(const Key &key, const T &value) const
Renvoie true si la carte multi contient un élément avec la clé key et la valeur value; sinon, renvoie false.
Voir aussi count().
QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key) const
Renvoie le nombre d'éléments associés à la clé key.
Voir aussi contains() et QMultiMap::count(const Key &key, const T &value).
QMultiMap<Key, T>::size_type QMultiMap::count(const Key &key, const T &value) const
Renvoie le nombre d'éléments ayant la clé key et la valeur value.
Voir aussi contains() et QMultiMap::count().
QMultiMap<Key, T>::size_type QMultiMap::count() const
Identique à size().
Il s'agit d'une fonction surchargée.
bool QMultiMap::empty() const
Cette fonction est fournie pour la compatibilité STL. Elle est équivalente à isEmpty() et renvoie la valeur true si la carte est vide, sinon elle renvoie la valeur false.
QMultiMap<Key, T>::iterator QMultiMap::end()
Renvoie un itérateur de style STL pointant vers l'élément imaginaire situé après le dernier élément de la carte multi.
Voir aussi begin() et constEnd().
QMultiMap<Key, T>::const_iterator QMultiMap::end() const
Il s'agit d'une fonction surchargée.
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator> QMultiMap::equal_range(const Key &key)
Renvoie une paire d'itérateurs délimitant la plage de valeurs [first, second), qui sont stockées sous key.
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator> QMultiMap::equal_range(const Key &key) const
Il s'agit d'une fonction surchargée.
QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator pos)
Supprime la paire (clé, valeur) indiquée par l'itérateur pos de la carte multi et renvoie un itérateur vers l'élément suivant de la carte.
Remarque : l'itérateur pos doit être valide et déréférençable.
Voir aussi remove().
[since 6.0] QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)
Supprime les paires (clé, valeur) désignées par l'itérateur [first, last) de la carte multiple. Renvoie un itérateur vers l'élément de la carte multi qui suit le dernier élément supprimé.
Remarque : l'intervalle [first, last) doit être un intervalle valide dans *this.
Cette fonction a été introduite dans Qt 6.0.
Voir aussi remove().
QMultiMap<Key, T>::iterator QMultiMap::find(const Key &key)
Renvoie un itérateur pointant vers l'élément avec la clé key dans la carte multi.
Si la carte multi ne contient aucun élément avec la clé key, la fonction renvoie end().
Si la carte contient plusieurs éléments avec la clé key, cette fonction renvoie un itérateur qui pointe sur la valeur la plus récemment insérée. Les autres valeurs sont accessibles en incrémentant l'itérateur. Par exemple, voici un code qui permet d'itérer sur tous les éléments ayant la même clé :
auto i = multimap.find("plenty"); while (i != multimap.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; }
Voir aussi constFind(), value(), values(), lowerBound() et upperBound().
QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key) const
Il s'agit d'une fonction surchargée.
QMultiMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const
Renvoie un itérateur constant pointant vers l'élément ayant les valeurs key et value dans la carte.
Si la carte ne contient aucun élément de ce type, la fonction renvoie end().
Si la carte contient plusieurs éléments avec les key spécifiés, cette fonction renvoie un itérateur constant qui pointe sur la valeur la plus récemment insérée.
Il s'agit d'une fonction surchargée.
T &QMultiMap::first()
Renvoie une référence à la première valeur de la carte multi, c'est-à-dire la valeur associée à la plus petite clé. Cette fonction suppose que la carte multi n'est pas vide.
Lorsqu'elle n'est pas partagée (ou que la version const est appelée), elle s'exécute en temps constant.
Voir aussi last(), firstKey() et isEmpty().
const T &QMultiMap::first() const
Il s'agit d'une fonction surchargée.
const Key &QMultiMap::firstKey() const
Renvoie une référence à la plus petite clé de la carte multi. Cette fonction suppose que la carte multi n'est pas vide.
Elle s'exécute en temps constant.
Voir aussi lastKey(), first(), keyBegin() et isEmpty().
QMultiMap<Key, T>::iterator QMultiMap::insert(const Key &key, const T &value)
Insère un nouvel élément avec la clé key et la valeur value.
S'il existe déjà un élément avec la même clé dans la carte, cette fonction en créera simplement un nouveau. (Ce comportement est différent de celui de replace(), qui écrase la valeur d'un élément existant).
Renvoie un itérateur pointant vers le nouvel élément.
Voir également replace().
QMultiMap<Key, T>::iterator QMultiMap::insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)
Insère un nouvel élément avec la clé key et la valeur value et avec l'indice pos suggérant où effectuer l'insertion.
Si constBegin() est utilisé comme indice, il indique que key est inférieur à n'importe quelle clé de la carte multiple, tandis que constEnd() suggère que key est (strictement) supérieur à n'importe quelle clé de la carte multiple. Sinon, l'indice doit remplir la condition (pos - 1).key() < key <= pos.key(). Si l'indice pos est erroné, il est ignoré et une insertion normale est effectuée.
Si l'indice est correct et que la carte multiple n'est pas partagée, l'insertion s'exécute en un temps constant amorti.
S'il existe déjà un élément avec la même clé dans la carte, cette fonction en créera simplement un nouveau.
Lors de la création d'une carte multiple à partir de données triées, l'insertion de la plus grande clé en premier avec constBegin() est plus rapide que l'insertion dans l'ordre trié avec constEnd(), puisque constEnd() - 1 (qui est nécessaire pour vérifier si l'indice est valide) nécessite un temps logarithmique.
Retourne un itérateur pointant vers le nouvel élément.
Note : Soyez prudent avec l'indice. Fournir un itérateur provenant d'une ancienne instance partagée peut provoquer un crash, mais il y a aussi un risque de corrompre silencieusement la multi-map et la multi-map de pos.
Il s'agit d'une fonction surchargée.
bool QMultiMap::isEmpty() const
Renvoie true si la carte multi ne contient aucun élément ; sinon, renvoie false.
Voir aussi size().
Key QMultiMap::key(const T &value, const Key &defaultKey = Key()) const
Renvoie la première clé avec la valeur value, ou defaultKey si la carte multi ne contient pas d'élément avec la valeur value. Si defaultKey n'est pas fourni, la fonction renvoie une clé construite par défaut.
Cette fonction peut être lente(temps linéaire), car la structure de données interne de QMultiMap est optimisée pour une recherche rapide par clé, et non par valeur.
QMultiMap<Key, T>::key_iterator QMultiMap::keyBegin() const
Renvoie un itérateur constant de style STL pointant vers la première clé de la carte multi.
Voir aussi keyEnd() et firstKey().
QMultiMap<Key, T>::key_iterator QMultiMap::keyEnd() const
Renvoie un itérateur constant de style STL pointant vers l'élément imaginaire situé après la dernière clé de la carte multi.
Voir aussi keyBegin() et lastKey().
QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueBegin()
Renvoie un itérateur de style STL pointant vers la première entrée de la carte multi.
Voir aussi keyValueEnd().
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueBegin() const
Renvoie un itérateur constant de style STL pointant vers la première entrée de la carte multi.
Voir aussi keyValueEnd().
QMultiMap<Key, T>::key_value_iterator QMultiMap::keyValueEnd()
Renvoie un itérateur de style STL pointant vers l'entrée imaginaire située après la dernière entrée de la carte multi.
Voir aussi keyValueBegin().
QMultiMap<Key, T>::const_key_value_iterator QMultiMap::keyValueEnd() const
Renvoie un itérateur constant de style STL pointant vers l'entrée imaginaire située après la dernière entrée de la carte multi.
Voir aussi keyValueBegin().
QList<Key> QMultiMap::keys() const
Renvoie une liste contenant toutes les clés de la carte multi par ordre croissant. Les clés qui apparaissent plusieurs fois dans la carte multi sont également présentes plusieurs fois dans la liste.
L'ordre est garanti être le même que celui utilisé par values().
Cette fonction crée une nouvelle liste en temps linéaire. L'utilisation du temps et de la mémoire que cela implique peut être évitée en itérant de keyBegin() à keyEnd().
QList<Key> QMultiMap::keys(const T &value) const
Renvoie une liste contenant toutes les clés associées à la valeur value dans l'ordre croissant.
Cette fonction peut être lente(temps linéaire), car la structure de données interne de QMultiMap est optimisée pour une recherche rapide par clé, et non par valeur.
Il s'agit d'une fonction surchargée.
T &QMultiMap::last()
Renvoie une référence à la dernière valeur de la carte multi, c'est-à-dire la valeur associée à la clé la plus grande. Cette fonction suppose que la carte n'est pas vide.
Lorsqu'elle n'est pas partagée (ou que la version const est appelée), elle s'exécute en temps constant.
Voir aussi first(), lastKey() et isEmpty().
const T &QMultiMap::last() const
Il s'agit d'une fonction surchargée.
const Key &QMultiMap::lastKey() const
Renvoie une référence à la plus grande clé de la carte multi. Cette fonction suppose que la carte multi n'est pas vide.
Elle s'exécute en temps constant.
Voir aussi firstKey(), last(), keyEnd() et isEmpty().
QMultiMap<Key, T>::iterator QMultiMap::lowerBound(const Key &key)
Renvoie un itérateur pointant vers le premier élément avec la clé key dans la carte. Si la carte ne contient aucun élément avec la clé key, la fonction renvoie un itérateur vers l'élément le plus proche avec une clé plus grande.
Exemple :
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()
Si la carte contient plusieurs éléments avec la clé key, cette fonction renvoie un itérateur qui pointe sur la valeur la plus récemment insérée. Les autres valeurs sont accessibles en incrémentant l'itérateur. Par exemple, voici un code qui permet d'itérer sur tous les éléments ayant la même clé :
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; }
Voir aussi upperBound() et find().
QMultiMap<Key, T>::const_iterator QMultiMap::lowerBound(const Key &key) const
Il s'agit d'une fonction surchargée.
QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key)
Supprime de la carte multi tous les éléments dont la clé est key. Renvoie le nombre d'éléments supprimés.
QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key, const T &value)
Supprime tous les éléments ayant la clé key et la valeur value de la carte multi. Renvoie le nombre d'éléments supprimés.
[since 6.1] template <typename Predicate> QMultiMap<Key, T>::size_type QMultiMap::removeIf(Predicate pred)
Supprime de la carte multi tous les éléments pour lesquels le prédicat pred renvoie la valeur "true".
La fonction prend en charge les prédicats qui prennent soit un argument de type QMultiMap<Key, T>::iterator, soit un argument de type std::pair<const Key &, T &>.
Elle renvoie le nombre d'éléments supprimés, le cas échéant.
Cette fonction a été introduite dans Qt 6.1.
QMultiMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)
Insère un nouvel élément avec la clé key et la valeur value.
S'il existe déjà un élément avec la clé key, la valeur de cet élément est remplacée par value.
S'il existe plusieurs éléments avec la clé key, la valeur de l'élément inséré le plus récemment est remplacée par value.
Renvoie un itérateur pointant vers l'élément nouveau/mise à jour.
Voir aussi insert().
QMultiMap<Key, T>::size_type QMultiMap::size() const
Renvoie le nombre de paires (clé, valeur) dans la carte multi.
Voir aussi isEmpty() et count().
[noexcept] void QMultiMap::swap(QMultiMap<Key, T> &other)
Remplace cette carte multiple par other. Cette opération est très rapide et n'échoue jamais.
T QMultiMap::take(const Key &key)
Supprime l'élément dont la clé est key de la carte multi et renvoie la valeur qui lui est associée.
Si l'élément n'existe pas dans la carte multi, la fonction renvoie simplement une valeur construite par défaut. S'il existe plusieurs éléments pour key dans la carte, seul le dernier élément inséré est supprimé et renvoyé.
Si vous n'utilisez pas la valeur de retour, remove() est plus efficace.
Voir également remove().
std::multimap<Key, T> QMultiMap::toStdMultiMap() const &
Retourne une carte multi STL équivalente à cette QMultiMap.
QList<Key> QMultiMap::uniqueKeys() const
Renvoie une liste contenant toutes les clés de la carte par ordre croissant. Les clés qui apparaissent plusieurs fois dans la carte n'apparaissent qu'une seule fois dans la liste renvoyée.
QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)
Déplace tous les éléments de la carte other dans cette carte. Si une clé est commune aux deux cartes, la carte résultante contiendra la clé plusieurs fois.
Si other est partagé, les éléments seront copiés à la place.
QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)
Insère tous les éléments de la carte other dans cette carte. Si une clé est commune aux deux cartes, la carte résultante contiendra la clé plusieurs fois.
QMultiMap<Key, T>::iterator QMultiMap::upperBound(const Key &key)
Renvoie un itérateur pointant vers l'élément qui suit immédiatement le dernier élément avec la clé key dans la carte. Si la carte ne contient aucun élément avec la clé key, la fonction renvoie un itérateur vers l'élément le plus proche avec une clé plus grande.
Exemple :
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()
Voir aussi lowerBound() et find().
QMultiMap<Key, T>::const_iterator QMultiMap::upperBound(const Key &key) const
Il s'agit d'une fonction surchargée.
T QMultiMap::value(const Key &key, const T &defaultValue = T()) const
Renvoie la valeur associée à la clé key.
Si la carte multi ne contient aucun élément avec la clé key, la fonction renvoie defaultValue. Si aucun defaultValue n'est spécifié, la fonction renvoie une valeur construite par défaut. S'il existe plusieurs éléments pour key dans la carte multi, la valeur de l'élément le plus récemment inséré est renvoyée.
Voir aussi key(), values() et contains().
QList<T> QMultiMap::values() const
Renvoie une liste contenant toutes les valeurs de la carte, dans l'ordre croissant de leurs clés. Si une clé est associée à plusieurs valeurs, toutes ses valeurs figureront dans la liste, et pas seulement la plus récente.
QList<T> QMultiMap::values(const Key &key) const
Renvoie une liste contenant toutes les valeurs associées à la clé key, de la plus récemment insérée à la moins récemment insérée.
[default] QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)
Move-assigne other à cette instance QMultiMap.
[default] QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)
Attribue other à cette carte multiple et renvoie une référence à cette carte multiple.
Non-membres associés
[since 6.1] template <
typename Key,
typename T,
typename Predicate
>
qsizetype erase_if(QMultiMap<Key, T> &map, Predicate pred)
Supprime de la carte multiple map tous les éléments pour lesquels le prédicat pred renvoie la valeur "true".
La fonction prend en charge les prédicats qui prennent soit un argument de type QMultiMap<Key, T>::iterator, soit un argument de type std::pair<const Key &, T &>.
Elle renvoie le nombre d'éléments supprimés, le cas échéant.
Cette fonction a été introduite dans Qt 6.1.
bool operator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
Renvoie true si lhs n'est pas égal à rhs; sinon, renvoie false.
Deux cartes multiples sont considérées comme égales si elles contiennent les mêmes paires (clé, valeur), dans le même ordre (ce qui est important pour les clés dupliquées).
Cette fonction nécessite les types de clé et de valeur pour implémenter operator==().
Voir aussi operator==().
template <typename Key, typename T> QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
Renvoie une carte qui contient tous les éléments de la carte lhs en plus de tous les éléments de rhs. Si une clé est commune aux deux cartes, la carte résultante contiendra la clé plusieurs fois.
Voir aussi operator+=().
template <typename Key, typename T> QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
Insère tous les éléments de la carte rhs dans la carte lhs et renvoie la carte résultante.
Voir aussi insert() et operator+().
template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
Écrit la carte multiple map dans le flux out.
Cette fonction nécessite l'implémentation des types clé et valeur operator<<().
Voir aussi Format des opérateurs QDataStream.
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
Renvoie true si lhs est égal à rhs; sinon, renvoie false.
Deux cartes multiples sont considérées comme égales si elles contiennent les mêmes paires (clé, valeur), dans le même ordre (ce qui est important pour les clés dupliquées).
Cette fonction nécessite les types de clé et de valeur pour implémenter operator==().
Voir aussi operator!=().
template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)
Lit une carte du flux in dans map.
Cette fonction nécessite que les types clé et valeur soient implémentés operator>>().
Voir aussi Format des opérateurs QDataStream.
© 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.