Sur cette page

QMultiMap Class

template <typename Key, typename T> class QMultiMap

La 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

Cette classe est comparable à l'égalité.

Note : Toutes les fonctions de cette classe sont réentrantes.

Types publics

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)
(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 :

QMultiMap<QString, int> multimap;

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" :

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

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.

Voir aussi begin() et cend().

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.

Voir aussi cbegin() et end().

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.

Voir aussi value() et keys().

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().

Voir aussi values() et key().

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.

Voir aussi clear() et take().

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.

Voir aussi clear() et take().

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

Voir aussi clear() et take().

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.

Voir aussi keys() et value().

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.

Voir aussi keys() et value().

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