Sur cette page

QMultiMap Class

template <typename Key, typename T> class QMultiMap

La classe QMultiMap est une classe de modèle qui fournit un tableau associatif comportant plusieurs clés équivalentes. En savoir plus...

En-tête : #include <QMultiMap>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Comparaisons avec QMultiMap

CatégorieTypes comparables
égalitéQMultiMap

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)
(since 6.12) bool operator<(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
(since 6.12) bool operator<=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) auto operator<=>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
bool operator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) bool operator>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
(since 6.12) 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, où Key est le type utilisé pour les clés de recherche et T est le type de valeur mappée. Elle stocke des paires (clé, valeur) et permet une recherche rapide par clé.

QMultiMap et QMultiHash offrent des fonctionnalités très similaires. Les différences sont les suivantes :

  • QMultiHash offre en moyenne des recherches plus rapides que QMultiMap. (Voir Complexité algorithmique pour plus de détails.)
  • Lors d’une itération sur un ` QMultiHash`, les éléments sont classé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 l’opérateur `==()` et une fonction globale ` qHash(Key)`. Le type de clé d’un `QMultiMap` doit fournir l’opérateur `<()` spécifiant un ordre total. Depuis Qt 5.8.1, il est également possible d’utiliser en toute sécurité un type pointeur comme clé, même si l’opérateur `<()` sous-jacent ne fournit pas d’ordre total.

Voici un exemple de QMultiMap avec des clés de type « QString » et des valeurs de type « int » :

QMultiMap<QString, int> multimap;

Pour insérer une paire (clé, valeur) dans le multi-map, vous pouvez utiliser la fonction insert() :

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

Cela insère les quatre paires (clé, valeur) suivantes dans le QMultiMap : (« a », 1), (« b », 3), (« c », 7) et (« c », -5) ; notez que les clés en double 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 clé donnée, 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 de la méthode ` 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 un QMultiMap, vous pouvez utiliser un itérateur. QMultiMap fournit à la fois des itérateurs de style Java (QMultiMapIterator et QMutableMultiMapIterator) et des itérateurs de style STL (QMultiMap::const_iterator et QMultiMap::iterator). Voici comment parcourir un 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-ci 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 par ordre croissant des clés.

Un QMultiMap autorise plusieurs valeurs par clé. Si vous appelez la fonction 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 associées à une même 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 partageant la même clé sont disponibles dans l’ordre allant du plus récent au plus ancien. Une autre approche consiste à appeler ` find()` pour obtenir l’itérateur de type STL correspondant au premier élément ayant cette clé, puis à 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 avez uniquement besoin d’extraire les valeurs d’une carte (et non les clés), vous pouvez également utiliser une boucle « for » basée sur une plage :

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

Les éléments peuvent être supprimés de la multi-map de plusieurs façons. L’une d’entre elles consiste à appeler ` remove()` ; cela supprimera tout élément possédant la clé indiquée. Une autre méthode consiste à utiliser ` QMutableMultiMapIterator::remove()`. De plus, vous pouvez vider l’intégralité de la multi-map à l’aide de ` clear()`.

Il est possible de fusionner deux multi-maps en appelant ` unite()` (), en utilisant l’opérateur `+()` et l’opérateur `+=()`. 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 des clés et des valeurs 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 permettra pas, par exemple, de stocker un QWidget en tant que valeur ; vous devrez plutôt stocker un QWidget *. De plus, le type de clé de QMultiMap doit fournir l’opérateur <(). QMap l’utilise pour maintenir ses éléments triés, et considère 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 cet exemple, on commence par comparer les noms des employés. S'ils sont égaux, on compare leurs dates de naissance pour départager les ex aequo.

Voir également QMultiMapIterator, QMutableMultiMapIterator et QMultiHash.

Documentation sur les types de membres

QMultiMap::ConstIterator

Synonyme « à la Qt » de « QMultiMap::const_iterator ».

QMultiMap::Iterator

Synonyme de « QMultiMap::iterator » dans le style Qt XML.

QMultiMap::const_key_value_iterator

Le typedef `QMultiMap::const_key_value_iterator` fournit un itérateur de type STL pour ` QMultiMap`.

QMultiMap::const_key_value_iterator est essentiellement identique à QMultiMap::const_iterator, à la différence que l'opérateur *() renvoie une paire clé/valeur au lieu d'une valeur.

Voir également QKeyValueIterator.

[alias] QMultiMap::difference_type

Définition de type pour `ptrdiff_t`. Fournie à des fins de compatibilité avec la STL.

[alias] QMultiMap::key_type

Définition de type pour « Key ». Fournie à des fins de compatibilité avec la STL.

QMultiMap::key_value_iterator

Le typedef `QMultiMap::key_value_iterator` fournit un itérateur de type STL pour ` QMultiMap`.

QMultiMap::key_value_iterator est essentiellement identique à QMultiMap::iterator, à la différence que l'opérateur *() renvoie une paire clé/valeur au lieu d'une valeur.

Voir également QKeyValueIterator.

[alias] QMultiMap::mapped_type

Définition de type pour T. Fournie à des fins de compatibilité avec la STL.

[alias] QMultiMap::size_type

Définition de type pour `int`. Fournie à des fins de compatibilité avec la STL.

Documentation des fonctions membres

[default] QMultiMap::QMultiMap()

Crée une multi-map vide.

Voir aussi clear().

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

Si other est partagé, cette fonction construit un multi-map en tant que copie de other. Sinon, elle construit un multi-map en y déplaçant les éléments provenant de other.

Cette fonction a été introduite dans Qt 6.0.

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

Crée une carte multiple en tant que copie de other.

Cette fonction a été introduite dans Qt 6.0.

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

Crée une copie de other.

Voir aussi toStdMultiMap().

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

Crée un objet `multi map` contenant une copie de chacun des éléments de la liste d'initialisation list.

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

Crée une carte multiple à partir de other.

Voir également toStdMultiMap().

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

Crée une copie d'other.

Cette opération s'effectue en temps constant, car QMultiMap est implicitement partagé. Cela rend très rapide le retour d'un QMultiMap depuis une fonction. Si une instance partagée est modifiée, elle sera copiée (copie à l'écriture), ce qui prend un temps linéaire.

Voir également operator=().

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

Cette méthode crée une instance de `QMultiMap` en la faisant pointer vers le même objet que celui vers lequel pointait ` other `.

[implicit] QMultiMap::~QMultiMap()

Supprime la multi-carte. Les références aux valeurs contenues dans cette multi-carte, ainsi que tous les itérateurs sur celle-ci, deviennent invalides.

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

Renvoie un objet « range » qui permet de parcourir cette multi-map sous forme de paires clé/valeur. Par exemple, cet objet « range » peut être utilisé dans une boucle « for » basée sur un intervalle, 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 toutes deux des références à celles contenues dans la multi-map. Plus précisément, la modification de la valeur entraînera une modification de la multi-map elle-même.

Ces fonctions ont été introduites dans Qt 6.4.

Voir également QKeyValueIterator.

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

Renvoie un itérateur de type STL pointant vers le premier élément de la multi-map.

Voir également 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 de type STL (const) pointant vers le premier élément de la multi-map.

Voir également begin() et cend().

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

Renvoie un itérateur de type STL (const) 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 multiple.

Voir aussi remove().

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

Renvoie un itérateur de type STL constant pointant vers le premier élément de la carte multi.

Voir également begin() et constEnd().

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

Renvoie un itérateur constant de type STL pointant vers l'élément imaginaire situé après le dernier élément de la multi-map.

Voir également constBegin() et end().

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

Renvoie un itérateur const pointant vers l'élément dont la clé est « key » dans la multi-map.

Si la multi-carte ne contient aucun élément avec la clé key, la fonction renvoie constEnd().

Voir également 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 de la table dont la clé est « key » et dont la valeur est « value ».

Si la table ne contient pas cet élément, la fonction renvoie ` constEnd()`.

Voir également QMap::constFind().

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

Renvoie un itérateur constant de type STL pointant vers la première entrée de la carte multi.

Voir également keyValueBegin().

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

Renvoie un itérateur const de type STL pointant vers l'entrée imaginaire située après la dernière entrée de la multi-map.

Voir également ` constKeyValueBegin()`.

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

Renvoie « true » si la multi-map contient un élément dont la clé est « key » ; sinon, renvoie « false ».

Voir également count().

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

Renvoie « true » si la carte multiple contient un élément dont la clé est « 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 également 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 dont la clé est « key » et la valeur « value ».

Voir également 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 à des fins de compatibilité avec la STL. Elle équivaut à ` isEmpty()`, qui renvoie `true` si la table est vide ; sinon, elle renvoie `false`.

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

Renvoie un itérateur de type STL pointant vers l'élément imaginaire situé après le dernier élément de la multi-map.

Voir également 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 l'intervalle 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) pointé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 également remove().

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

Supprime de la multi-map les paires (clé, valeur) pointées par la plage d'itérateurs [first, last). Renvoie un itérateur vers l'élément de la multi-map suivant le dernier élément supprimé.

Remarque : la plage [first, last) doit être une plage valide dans *this.

Cette fonction a été introduite dans Qt 6.0.

Voir également remove().

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

Renvoie un itérateur pointant vers l'élément dont la clé est « key » dans la multi-map.

Si la multi-map ne contient aucun élément avec la clé key, la fonction renvoie end().

Si la carte contient plusieurs éléments portant la clé « key », cette fonction renvoie un itérateur pointant vers la valeur insérée le plus récemment. Les autres valeurs sont accessibles en incrémentant l’itérateur. Voici, par exemple, un extrait de code qui parcourt tous les éléments portant 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 également 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 const pointant vers l'élément de la carte dont l'key et l'value sont les valeurs indiquées.

Si la carte ne contient aucun élément de ce type, la fonction renvoie ` end()`.

Si la carte contient plusieurs éléments présentant l’ key spécifiée, cette fonction renvoie un itérateur const pointant vers la valeur insérée le plus récemment.

Il s'agit d'une fonction surchargée.

T &QMultiMap::first()

Renvoie une référence à la première valeur de la multi-carte, c'est-à-dire la valeur associée à la clé la plus petite. Cette fonction suppose que la multi-carte n'est pas vide.

Lorsqu’elle n’est pas partagée (ou lorsque la version const est appelée), cette fonction s’exécute en temps constant.

Voir également 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 clé la plus petite de la multi-carte. Cette fonction suppose que la multi-carte n'est pas vide.

Cette opération s'exécute en temps constant.

Voir également 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 portant la même clé dans la table, cette fonction se contente d'en créer un nouveau. (Ce comportement diffère de celui de la fonction replace(), qui écrase la valeur d'un élément existant.)

QMultiMap autorise les clés en double et stocke les éléments par ordre croissant des clés. En cas de clés en double, les valeurs sont stockées dans l’ordre inverse de leur insertion (la valeur insérée le plus récemment apparaît en premier).

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, la valeur value et l'indication pos précisant où effectuer l'insertion.

Si constBegin() est utilisé comme indice, cela indique que key est inférieur à n'importe quelle clé de la multi-carte, tandis que constEnd() suggère que key est (strictement) supérieur à n'importe quelle clé de la multi-carte. Sinon, l’indication doit satisfaire la condition (pos - 1).key() < key <= pos.key(). Si l’indication pos est erronée, elle est ignorée et une insertion standard est effectuée.

Si l’indication est correcte et que la multi-map n’est pas partagée, l’insertion s’exécute en 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 multi-map à partir de données triées, l’insertion de la clé la plus grande en premier avec ` constBegin()` est plus rapide que l’insertion dans l’ordre trié avec ` constEnd()`, car ` constEnd()` - 1 (nécessaire pour vérifier si l’indication est valide) nécessite un temps logarithmique.

Renvoie un itérateur pointant vers le nouvel élément.

Remarque : soyez prudent avec l'indication. Fournir un itérateur provenant d'une ancienne instance partagée peut provoquer un plantage, mais il existe également un risque que cela corrompe silencieusement à la fois la multi-map et la multi-map pos.

Il s’agit d’une fonction surchargée.

bool QMultiMap::isEmpty() const

Renvoie « true » si la carte multiple 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é dont la valeur est value, ou defaultKey si la carte multi ne contient aucun élément dont la valeur est value. Si aucune defaultKey n'est fournie, 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 également value() et keys().

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

Renvoie un itérateur const de type STL pointant vers la première clé de la carte multi.

Voir également keyEnd() et firstKey().

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

Renvoie un itérateur de type STL (const) pointant vers l'élément imaginaire situé après la dernière clé de la carte multi.

Voir également keyBegin() et lastKey().

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

Renvoie un itérateur de type STL pointant vers la première entrée de la multi-map.

Voir également keyValueEnd().

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

Renvoie un itérateur constant de type STL pointant vers la première entrée de la carte multi.

Voir également keyValueEnd().

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

Renvoie un itérateur de type STL pointant vers l'entrée imaginaire située après la dernière entrée de la carte multi.

Voir également ` keyValueBegin()`.

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

Renvoie un itérateur de type STL (const) pointant vers l'entrée imaginaire située après la dernière entrée de la carte multi.

Voir également ` keyValueBegin()`.

QList<Key> QMultiMap::keys() const

Renvoie une liste contenant toutes les clés de la multi-map, classées par ordre croissant. Les clés qui apparaissent plusieurs fois dans la multi-map apparaissent également plusieurs fois dans la liste.

L’ordre est garanti d’être le même que celui utilisé par la fonction values().

Cette fonction crée une nouvelle liste, en temps linéaire. La consommation de temps et de mémoire que cela implique peut être évitée en itérant de ` keyBegin()` à ` keyEnd()`.

Voir également values() et key().

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

Renvoie une liste contenant toutes les clés associées à la valeur value, classées par ordre croissant.

Cette fonction peut être lente (temps linéaire), car la structure de données interne d'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), cette fonction s’exécute en temps constant.

Voir également 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 clé la plus grande de la multi-map. Cette fonction suppose que la multi-map n'est pas vide.

Cette opération s'exécute en temps constant.

Voir également firstKey(), last(), keyEnd() et isEmpty().

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

Renvoie un itérateur pointant vers le premier élément de la carte dont la clé est « key ». Si la carte ne contient aucun élément dont la clé est « key », la fonction renvoie un itérateur pointant vers l'élément le plus proche dont la clé est supérieure.

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 dont la clé est key, cette fonction renvoie un itérateur pointant vers la valeur insérée le plus récemment. Les autres valeurs sont accessibles en incrémentant l'itérateur. Voici, par exemple, un extrait de code qui parcourt 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 également 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 tous les éléments de la multi-map dont la clé est « key ». Renvoie le nombre d'éléments supprimés.

Voir également clear() et take().

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

Supprime tous les éléments de la carte multi dont la clé est « key » et la valeur « value ». Renvoie le nombre d'éléments supprimés.

Voir également clear() et take().

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

Supprime de la multi-carte tous les éléments pour lesquels le prédicat pred renvoie « vrai ».

La fonction prend en charge les prédicats qui acceptent soit un argument de type ` QMultiMap<Key, T>::iterator`, soit un argument de type ` std::pair<const Key &, T &>`.

Renvoie le nombre d'éléments supprimés, le cas échéant.

Cette fonction a été introduite dans Qt 6.1.

Voir également 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 ou mis à jour.

Voir également insert().

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

Renvoie le nombre de paires (clé, valeur) présentes dans la multi-carte.

Voir également 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 ne pose jamais de problème.

T QMultiMap::take(const Key &key)

Supprime l'élément dont la clé est « key » de la multi-map et renvoie la valeur qui lui est associée.

Si l'élément n'existe pas dans la multi-map, la fonction renvoie simplement une valeur construite par défaut. S'il existe plusieurs éléments correspondant à key dans la multi-map, seul celui qui a été inséré le plus récemment est supprimé et renvoyé.

Si vous n'utilisez pas la valeur renvoyée, la fonction ` remove()` s'avère plus efficace.

Voir également ` remove()`.

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

Renvoie une « multi-map » STL équivalente à celle-ci : QMultiMap.

QList<Key> QMultiMap::uniqueKeys() const

Renvoie une liste contenant toutes les clés de la table, classées par ordre croissant. Les clés qui apparaissent plusieurs fois dans la table 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 » vers cette carte. Si une clé est commune aux deux cartes, la carte résultante contiendra cette clé plusieurs fois.

Si « other » est partagée, les éléments seront alors 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 cette 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 de la carte dont la clé est « key ». Si la carte ne contient aucun élément dont la clé est « key », la fonction renvoie un itérateur vers l'élément le plus proche dont la clé est supérieure.

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 également 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 aucune defaultValue n’est spécifiée, la fonction renvoie une valeur construite par défaut. S’il existe plusieurs éléments pour key dans la carte multi, la valeur de celui qui a été inséré le plus récemment est renvoyée.

Voir également key(), values() et contains().

QList<T> QMultiMap::values() const

Renvoie une liste contenant toutes les valeurs de la carte, classées par ordre croissant de leurs clés. Si une clé est associée à plusieurs valeurs, toutes ces valeurs figureront dans la liste, et pas seulement celle qui a été insérée en dernier.

Voir également 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écente à la plus ancienne.

Voir également keys() et value().

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

Cette opération attribue l'other à cette instance QMultiMap.

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

Attribue la valeur « other » à cette multi-map et renvoie une référence à celle-ci.

Éléments non membres associés

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

Supprime tous les éléments pour lesquels le prédicat pred renvoie « vrai » de la carte multiple map.

La fonction prend en charge les prédicats qui acceptent soit un argument de type ` QMultiMap<Key, T>::iterator`, soit un argument de type ` std::pair<const Key &, T &>`.

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 multi-maps sont considérées comme égales si elles contiennent les mêmes paires (clé, valeur), dans le même ordre (ce qui est important en cas de clés en double).

Cette fonction nécessite que les types de clé et de valeur implémentent l'interface 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 contenant tous les éléments de la carte lhs ainsi que tous ceux de la carte rhs. Si une clé est commune aux deux cartes, la carte résultante contiendra cette clé plusieurs fois.

Voir également 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 également insert() et operator+().

[since 6.12] bool operator<(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Renvoie true si lhs est lexicalement inférieur à rhs; sinon, renvoie false.

Cet opérateur est disponible si le type de clé Key et le type mappé T fournissent tous deux l’une des méthodes suivantes : operator<=>() (en mode C++20), compareThreeWay() ou operator<().

Cette fonction a été introduite dans Qt 6.12.

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

Écrit la carte multiple map vers le flux out.

Cette fonction nécessite que les types de clé et de valeur implémentent l'interface operator<<().

Voir également le format des opérateurs QDataStream.

[since 6.12] bool operator<=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Renvoie true si lhs est lexicalement inférieur ou égal à rhs; sinon, renvoie false.

Cet opérateur est disponible si le type de clé Key et le type mappé T fournissent tous deux l’un des éléments suivants : operator<=>() (en mode C++20), la méthode d’aide compareThreeWay() ou operator<().

Cette fonction a été introduite dans Qt 6.12.

[since 6.12] auto operator<=>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Compare le contenu de lhs et rhs selon l'ordre lexicographique. Renvoie le résultat du type de catégorie le plus fort applicable.

Remarque : cet opérateur n'est disponible qu'en mode C++20 lorsque le type de clé Key et le type mappé T satisfont tous deux aux exigences du concept std::three_way_comparable ou fournissent operator<(). Dans ce cas, les opérateurs <, <=, > et >= sont synthétisés à partir de operator<=>() et operator==().

Cette fonction a été introduite dans Qt 6.12.

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

Renvoie « true » si « lhs » est égal à « rhs » ; sinon, renvoie « false ».

Deux multi-maps sont considérées comme égales si elles contiennent les mêmes paires (clé, valeur), dans le même ordre (ce qui est important en cas de clés en double).

Cette fonction nécessite que les types de clé et de valeur implémentent l'interface operator==().

Voir également operator!=().

[since 6.12] bool operator>(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Renvoie true si lhs est lexicalement supérieur à rhs; sinon, renvoie false.

Cet opérateur est disponible si le type de clé Key et le type mappé T fournissent tous deux l’une des méthodes suivantes : operator<=>() (en mode C++20), compareThreeWay() ou operator<().

Cette fonction a été introduite dans Qt 6.12.

[since 6.12] bool operator>=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

Renvoie « true » si « lhs » est lexicalement supérieur ou égal à « rhs » ; sinon, renvoie « false ».

Cet opérateur est disponible si le type de clé Key et le type mappé T fournissent tous deux l'une des méthodes suivantes : operator<=>() (en mode C++20), la méthode d'aide compareThreeWay() ou operator<().

Cette fonction a été introduite dans Qt 6.12.

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

Lit une carte depuis le flux in et la stocke dans map.

Cette fonction nécessite que les types de clé et de valeur implémentent l'interface operator>>().

Voir également 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.