En esta página

QMultiMap Class

template <typename Key, typename T> class QMultiMap

La clase QMultiMap es una clase plantilla que proporciona un array asociativo con múltiples claves equivalentes. Más...

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

Esta clase es igual-comparable.

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

Funciones Públicas

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)

Descripción Detallada

QMultiMap<Key, T> es una de las clases contenedoras genéricas de Qt. Almacena pares (clave, valor) y proporciona una búsqueda rápida por clave.

QMultiMap y QMultiHash proporcionan funcionalidades muy similares. Las diferencias son:

  • QMultiHash QMultiMap proporciona búsquedas más rápidas que QMultiMap. (Véase Complejidad algorítmica para más detalles).
  • Cuando se itera sobre QMultiHash, los elementos se ordenan arbitrariamente. Con QMultiMap, los elementos siempre se ordenan por clave.
  • El tipo de clave de un QMultiHash debe proporcionar operator==() y una función global qHash(Clave). El tipo clave de un QMultiMap debe proporcionar operator<() especificando un orden total. Desde Qt 5.8.1 también es seguro usar un tipo puntero como clave, incluso si el operator<() subyacente no proporciona un orden total.

He aquí un ejemplo de QMultiMap con QString claves y int valores:

QMultiMap<QString, int> multimap;

Para insertar un par (clave, valor) en el mapa múltiple, puede utilizar insert():

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

Esto inserta los siguientes cuatro pares (clave, valor) en el QMultiMap: ("a", 1), ("b", 3), ("c", 7), y ("c", -5); ten en cuenta que se permiten claves duplicadas.

Para buscar un valor, utilice find() o 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();
}

Si no hay ningún elemento con la clave especificada en el mapa, estas funciones devuelven un valor construido por defecto.

Si desea comprobar si el mapa contiene una clave determinada, utilice 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();

También existe una sobrecarga de value() que utiliza su segundo argumento como valor por defecto si no hay ningún elemento con la clave especificada:

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

Si quieres navegar por todos los pares (clave, valor) almacenados en un QMultiMap, puedes utilizar un iterador. QMultiMap proporciona tanto iteradores de estilo Java (QMultiMapIterator y QMutableMultiMapIterator) como iteradores de estilo STL (QMultiMap::const_iterator y QMultiMap::iterator). He aquí cómo iterar sobre un QMultiMap<QString, int> usando un iterador estilo Java:

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

Aquí está el mismo código, pero usando un iterador estilo STL esta vez:

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

Los elementos se recorren en orden de clave ascendente.

Un QMultiMap permite múltiples valores por clave. Si llamas a insert() con una clave que ya existe en el mapa, se insertará un nuevo par (clave, valor). Por ejemplo:

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

Si desea recuperar todos los valores de una sola clave, puede utilizar values(const Key &key), que devuelve un QList<T>:

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

Los elementos que comparten la misma clave están disponibles desde el más reciente al menos reciente insertado. Otro enfoque es llamar a find() para obtener el iterador de estilo STL para el primer elemento con una clave e iterar a partir de ahí:

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 sólo necesita extraer los valores de un mapa (no las claves), también puede utilizar for basado en rangos:

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

Los elementos se pueden eliminar del mapa múltiple de varias formas. Una forma es llamar a remove(); esto eliminará cualquier elemento con la clave dada. Otra forma es utilizar QMutableMultiMapIterator::remove(). Además, puede borrar todo el mapa utilizando clear().

Es posible fusionar dos mapas múltiples llamando a unite(), utilizando operator+() y utilizando operator+=(). Ejemplo:

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

Los tipos de datos clave y valor de QMultiMap deben ser tipos de datos asignables. Esto cubre la mayoría de los tipos de datos que es probable encontrar, pero el compilador no le permitirá, por ejemplo, almacenar un QWidget como valor; en su lugar, almacene un QWidget *. Además, el tipo de clave de QMultiMap debe proporcionar operator<(). QMap lo utiliza para mantener sus elementos ordenados, y asume que dos claves x y y son iguales si ni x < y ni y < x son verdaderas.

Ejemplo:

#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

En el ejemplo, empezamos comparando los nombres de los empleados. Si son iguales, comparamos sus fechas de nacimiento para deshacer el empate.

Véase también QMultiMapIterator, QMutableMultiMapIterator, y QMultiHash.

Documentación de tipos de miembros

QMultiMap::ConstIterator

Qt-style sinónimo de QMultiMap::const_iterator.

QMultiMap::Iterator

Qt-style sinónimo de QMultiMap::iterator.

QMultiMap::const_key_value_iterator

El typedef QMultiMap::const_key_value_iterator proporciona un iterador estilo STL para QMultiMap.

QMultiMap::const_key_value_iterator es esencialmente lo mismo que QMultiMap::const_iterator con la diferencia de que operator*() devuelve un par clave/valor en lugar de un valor.

Véase también QKeyValueIterator.

[alias] QMultiMap::difference_type

Typedef para ptrdiff_t. Proporcionado para la compatibilidad STL.

[alias] QMultiMap::key_type

Typedef para Key. Se proporciona por compatibilidad con STL.

QMultiMap::key_value_iterator

El typedef QMultiMap::key_value_iterator proporciona un iterador estilo STL para QMultiMap.

QMultiMap::key_value_iterator es esencialmente lo mismo que QMultiMap::iterator con la diferencia de que operator*() devuelve un par clave/valor en lugar de un valor.

Véase también QKeyValueIterator.

[alias] QMultiMap::mapped_type

Typedef para T. Proporcionado por compatibilidad con STL.

[alias] QMultiMap::size_type

Typedef para int. Se proporciona por compatibilidad con la STL.

Documentación de funciones miembro

QMultiMap::QMultiMap()

Construye un mapa múltiple vacío.

Véase también clear().

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

Si other es compartido, construye un mapa múltiple como una copia de other. De lo contrario, construye un mapa múltiple moviendo los elementos de other.

Esta función se introdujo en Qt 6.0.

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

Construye un mapa múltiple como una copia de other.

Esta función se introdujo en Qt 6.0.

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

Construye una copia de other.

Véase también toStdMultiMap().

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

Construye un mapa múltiple con una copia de cada uno de los elementos de la lista inicializadora list.

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

Construye un mapa múltiple desplazándose desde other.

Véase también toStdMultiMap().

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

Construye una copia de other.

Esta operación ocurre en tiempo constante, porque QMultiMap es implícitamente compartido. Esto hace que devolver un QMultiMap desde una función sea muy rápido. Si una instancia compartida es modificada, será copiada (copy-on-write), y esto toma tiempo lineal.

Véase también operator=().

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

Move-construye una instancia de QMultiMap, haciendo que apunte al mismo objeto al que apuntaba other.

[default] QMultiMap::~QMultiMap()

Destruye el mapa múltiple. Las referencias a los valores del mapa múltiple, y todos los iteradores sobre este mapa múltiple, dejan de ser válidos.

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

Devuelve un objeto de rango que permite iterar sobre este mapa múltiple como pares clave/valor. Por ejemplo, este objeto range puede utilizarse en un bucle for basado en range, en combinación con una declaración de vinculación estructurada:

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
}

Tenga en cuenta que tanto la clave como el valor obtenidos de esta forma son referencias a los del mapa múltiple. En concreto, al mutar el valor se modificará el propio mapa.

Estas funciones se introdujeron en Qt 6.4.

Véase también QKeyValueIterator.

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

Devuelve un iterador de estilo STL que apunta al primer elemento del mapa múltiple.

Véase también constBegin() y end().

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

Se trata de una función sobrecargada.

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

Devuelve un iterador const de estilo STL que apunta al primer elemento del mapa múltiple.

Véase también begin() y cend().

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

Devuelve un iterador const de estilo STL que apunta al elemento imaginario después del último elemento del mapa múltiple.

Véase también cbegin() y end().

void QMultiMap::clear()

Elimina todos los elementos del mapa múltiple.

Véase también remove().

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

Devuelve un iterador const de estilo STL que apunta al primer elemento del mapa múltiple.

Véase también begin() y constEnd().

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

Devuelve un iterador const de estilo STL que apunta al elemento imaginario después del último elemento del mapa múltiple.

Véase también constBegin() y end().

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

Devuelve un iterador const que apunta al elemento con clave key en el mapa múltiple.

Si el mapa múltiple no contiene ningún elemento con la clave key, la función devuelve constEnd().

Véase también find() y QMultiMap::constFind(const Key &key, const T &value).

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

Devuelve un iterador que apunta al elemento con la clave key y el valor value en el mapa.

Si el mapa no contiene dicho elemento, la función devuelve constEnd().

Véase también QMap::constFind().

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

Devuelve un iterador const de estilo STL que apunta a la primera entrada del mapa múltiple.

Véase también keyValueBegin().

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

Devuelve un iterador const de estilo STL que apunta a la entrada imaginaria después de la última entrada en el mapa múltiple.

Véase también constKeyValueBegin().

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

Devuelve true si el mapa múltiple contiene un elemento con la clave key; en caso contrario devuelve false.

Véase también count().

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

Devuelve true si el mapa múltiple contiene un elemento con la clave key y el valor value; en caso contrario devuelve false.

Véase también count().

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

Devuelve el número de elementos asociados a la clave key.

Véase también contains() y QMultiMap::count(const Key &key, const T &value).

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

Devuelve el número de elementos con clave key y valor value.

Véase también contains() y QMultiMap::count().

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

Igual que size().

Se trata de una función sobrecargada.

bool QMultiMap::empty() const

Esta función se proporciona por compatibilidad con STL. Es equivalente a isEmpty(), devolviendo true si el mapa está vacío; en caso contrario devuelve false.

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

Devuelve un iterador de estilo STL que apunta al elemento imaginario después del último elemento del mapa múltiple.

Véase también begin() y constEnd().

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

Se trata de una función sobrecargada.

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

Devuelve un par de iteradores que delimitan el rango de valores [first, second), que se almacenan en key.

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

Se trata de una función sobrecargada.

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

Elimina el par (clave, valor) apuntado por el iterador pos del mapa múltiple y devuelve un iterador al siguiente elemento del mapa.

Nota: El iterador pos debe ser válido y desreferenciable.

Véase también remove().

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

Elimina los pares (clave, valor) señalados por el rango de iteradores [first, last) del mapa múltiple. Devuelve un iterador al elemento del mapa múltiple siguiente al último elemento eliminado.

Nota: El rango [first, last) debe ser un rango válido en *this.

Esta función se introdujo en Qt 6.0.

Véase también remove().

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

Devuelve un iterador que apunta al elemento con clave key en el mapa múltiple.

Si el mapa múltiple no contiene ningún elemento con la clave key, la función devuelve end().

Si el mapa contiene varios elementos con la clave key, esta función devuelve un iterador que apunta al valor insertado más recientemente. Los demás valores son accesibles incrementando el iterador. Por ejemplo, aquí hay algo de código que itera sobre todos los elementos con la misma clave:

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;
}

Véase también constFind(), value(), values(), lowerBound(), y upperBound().

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

Se trata de una función sobrecargada.

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

Devuelve un iterador constante que apunta al elemento con los valores key y value en el mapa.

Si el mapa no contiene dicho elemento, la función devuelve end().

Si el mapa contiene varios elementos con el key especificado, esta función devuelve un iterador constante que apunta al valor insertado más recientemente.

Se trata de una función sobrecargada.

T &QMultiMap::first()

Devuelve una referencia al primer valor del mapa múltiple, es decir, el valor asignado a la clave más pequeña. Esta función asume que el mapa múltiple no está vacío.

Cuando no se comparte (o se llama a la versión const), se ejecuta en tiempo constante.

Véase también last(), firstKey() y isEmpty().

const T &QMultiMap::first() const

Se trata de una función sobrecargada.

const Key &QMultiMap::firstKey() const

Devuelve una referencia a la clave más pequeña del mapa múltiple. Esta función asume que el mapa múltiple no está vacío.

Se ejecuta en tiempo constante.

Véase también lastKey(), first(), keyBegin() y isEmpty().

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

Inserta un nuevo elemento con la clave key y un valor de value.

Si ya existe un elemento con la misma clave en el mapa, esta función simplemente creará uno nuevo. (Este comportamiento es diferente de replace(), que sobrescribe el valor de un elemento existente).

Devuelve un iterador que apunta al nuevo elemento.

Véase también replace().

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

Inserta un nuevo elemento con la clave key y el valor value y con la sugerencia pos sugiriendo dónde realizar la inserción.

Si se utiliza constBegin() como pista indica que key es menor que cualquier clave del mapa múltiple mientras que constEnd() sugiere que key es (estrictamente) mayor que cualquier clave del mapa múltiple. En caso contrario, la pista debe cumplir la condición (pos - 1).key() < key <= pos.key(). Si la pista pos es incorrecta, se ignora y se realiza una inserción normal.

Si la pista es correcta y el mapa múltiple no está compartido, la inserción se ejecuta en tiempo constante amortizado.

Si ya existe un elemento con la misma clave en el mapa, esta función simplemente creará uno nuevo.

Cuando se crea un mapa múltiple a partir de datos ordenados, insertar primero la clave mayor con constBegin() es más rápido que insertar en orden con constEnd(), ya que constEnd() - 1 (que se necesita para comprobar si la pista es válida) necesita tiempo logarítmico.

Devuelve un iterador que apunta al nuevo elemento.

Nota: Ten cuidado con la pista. Proporcionar un iterador de una instancia compartida anterior puede provocar un fallo, pero también existe el riesgo de que corrompa silenciosamente tanto el mapa múltiple como el mapa múltiple pos.

Esta es una función sobrecargada.

bool QMultiMap::isEmpty() const

Devuelve true si el mapa múltiple no contiene elementos; en caso contrario devuelve false.

Véase también size().

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

Devuelve la primera clave con valor value, o defaultKey si el mapa múltiple no contiene ningún elemento con valor value. Si no se proporciona defaultKey, la función devuelve una clave construida por defecto.

Esta función puede ser lenta(tiempo lineal), porque la estructura de datos interna de QMultiMap está optimizada para una búsqueda rápida por clave, no por valor.

Véase también value() y keys().

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

Devuelve un iterador const de estilo STL que apunta a la primera clave del mapa múltiple.

Véase también keyEnd() y firstKey().

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

Devuelve un iterador const de estilo STL que apunta al elemento imaginario después de la última clave en el mapa múltiple.

Véase también keyBegin() y lastKey().

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

Devuelve un iterador de estilo STL que apunta a la primera entrada del mapa múltiple.

Véase también keyValueEnd().

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

Devuelve un iterador const de estilo STL que apunta a la primera entrada del mapa múltiple.

Véase también keyValueEnd().

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

Devuelve un iterador estilo STL que apunta a la entrada imaginaria después de la última entrada en el mapa múltiple.

Véase también keyValueBegin().

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

Devuelve un iterador const de estilo STL que apunta a la entrada imaginaria después de la última entrada en el mapa múltiple.

Véase también keyValueBegin().

QList<Key> QMultiMap::keys() const

Devuelve una lista que contiene todas las claves del mapa múltiple en orden ascendente. Las claves que aparecen varias veces en el mapa múltiple también aparecen varias veces en la lista.

Se garantiza que el orden sea el mismo que el utilizado por values().

Esta función crea una nueva lista, en tiempo lineal. El uso de tiempo y memoria que conlleva puede evitarse iterando de keyBegin() a keyEnd().

Véase también values() y key().

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

Devuelve una lista que contiene todas las claves asociadas al valor value en orden ascendente.

Esta función puede ser lenta(tiempo lineal), porque la estructura de datos interna de QMultiMap está optimizada para una búsqueda rápida por clave, no por valor.

Se trata de una función sobrecargada.

T &QMultiMap::last()

Devuelve una referencia al último valor del mapa múltiple, es decir, el valor asignado a la clave mayor. Esta función asume que el mapa no está vacío.

Cuando no se comparte (o se llama a la versión const), se ejecuta en tiempo constante.

Véase también first(), lastKey() y isEmpty().

const T &QMultiMap::last() const

Se trata de una función sobrecargada.

const Key &QMultiMap::lastKey() const

Devuelve una referencia a la clave más grande del mapa múltiple. Esta función asume que el mapa múltiple no está vacío.

Se ejecuta en tiempo constante.

Véase también firstKey(), last(), keyEnd() y isEmpty().

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

Devuelve un iterador que apunta al primer elemento con clave key en el mapa. Si el mapa no contiene ningún elemento con la clave key, la función devuelve un iterador al elemento más cercano con una clave mayor.

Ejemplo:

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 el mapa contiene varios elementos con la clave key, esta función devuelve un iterador que apunta al valor insertado más recientemente. Los demás valores son accesibles incrementando el iterador. Por ejemplo, aquí hay un código que itera sobre todos los elementos con la misma clave:

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;
}

Véase también upperBound() y find().

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

Se trata de una función sobrecargada.

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

Elimina todos los elementos que tienen la clave key del mapa múltiple. Devuelve el número de elementos eliminados.

Véase también clear() y take().

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

Elimina todos los elementos que tienen la clave key y el valor value del mapa múltiple. Devuelve el número de elementos eliminados.

Véase también clear() y take().

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

Elimina del mapa múltiple todos los elementos para los que el predicado pred devuelve verdadero.

La función admite predicados que toman un argumento de tipo QMultiMap<Key, T>::iterator, o un argumento de tipo std::pair<const Key &, T &>.

Devuelve el número de elementos eliminados, si los hay.

Esta función se introdujo en Qt 6.1.

Véase también clear() y take().

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

Inserta un nuevo elemento con la clave key y el valor value.

Si ya existe un elemento con la clave key, el valor de ese elemento se sustituye por value.

Si hay varios elementos con la clave key, el valor del elemento insertado más recientemente se sustituye por value.

Devuelve un iterador que apunta al elemento nuevo/actualizado.

Véase también insert().

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

Devuelve el número de pares (clave, valor) en el mapa múltiple.

Véase también isEmpty() y count().

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

Intercambia este mapa múltiple con other. Esta operación es muy rápida y nunca falla.

T QMultiMap::take(const Key &key)

Elimina el elemento con la clave key del mapa múltiple y devuelve el valor asociado a él.

Si el elemento no existe en el mapa múltiple, la función simplemente devuelve un valor construido por defecto. Si hay varios elementos para key en el mapa, sólo se elimina y devuelve el último que se haya insertado.

Si no se utiliza el valor devuelto, remove() es más eficiente.

Véase también remove().

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

Devuelve un mapa STL multi equivalente a este QMultiMap.

QList<Key> QMultiMap::uniqueKeys() const

Devuelve una lista que contiene todas las claves del mapa en orden ascendente. Las claves que aparecen varias veces en el mapa sólo aparecen una vez en la lista devuelta.

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

Mueve todos los elementos del mapa other a este mapa. Si una clave es común a ambos mapas, el mapa resultante contendrá la clave varias veces.

Si other es compartido, los elementos se copiarán en su lugar.

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

Inserta todos los elementos del mapa other en este mapa. Si una clave es común a ambos mapas, el mapa resultante contendrá la clave varias veces.

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

Devuelve un iterador que apunta al elemento que sigue inmediatamente al último elemento con clave key en el mapa. Si el mapa no contiene ningún elemento con la clave key, la función devuelve un iterador al elemento más cercano con una clave mayor.

Ejemplo:

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

Véase también lowerBound() y find().

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

Se trata de una función sobrecargada.

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

Devuelve el valor asociado a la clave key.

Si el mapa múltiple no contiene ningún elemento con la clave key, la función devuelve defaultValue. Si no se especifica defaultValue, la función devuelve un valor construido por defecto. Si hay varios elementos para key en el mapa múltiple, se devuelve el valor del insertado más recientemente.

Véase también key(), values() y contains().

QList<T> QMultiMap::values() const

Devuelve una lista que contiene todos los valores del mapa, en orden ascendente de sus claves. Si una clave está asociada a múltiples valores, todos sus valores estarán en la lista, y no sólo el insertado más recientemente.

Véase también keys() y value().

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

Devuelve una lista que contiene todos los valores asociados a la clave key, desde el insertado más recientemente hasta el insertado menos recientemente.

Véase también keys() y value().

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

Mover-asigna other a esta instancia QMultiMap.

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

Asigna other a este mapa múltiple y devuelve una referencia a este mapa múltiple.

No miembros relacionados

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

Elimina todos los elementos para los que el predicado pred devuelve verdadero del mapa múltiple map.

La función admite predicados que toman un argumento de tipo QMultiMap<Key, T>::iterator, o un argumento de tipo std::pair<const Key &, T &>.

Devuelve el número de elementos eliminados, si los hay.

Esta función se introdujo en Qt 6.1.

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

Devuelve true si lhs no es igual a rhs; en caso contrario devuelve false.

Dos mapas múltiples se consideran iguales si contienen los mismos pares (clave, valor), en el mismo orden (lo que importa para claves duplicadas).

Esta función requiere que los tipos de clave y valor implementen operator==().

Véase también operator==().

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

Devuelve un mapa que contiene todos los elementos del mapa lhs además de todos los elementos de rhs. Si una clave es común a ambos mapas, el mapa resultante contendrá la clave varias veces.

Véase también operator+=().

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

Inserta todos los elementos del mapa rhs en el mapa lhs y devuelve el mapa resultante.

Véase también insert() y operator+().

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

Escribe el mapa múltiple map en el flujo out.

Esta función requiere que los tipos clave y valor implementen operator<<().

Véase también Formato de los operadores QDataStream.

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

Devuelve true si lhs es igual a rhs; en caso contrario devuelve false.

Dos mapas múltiples se consideran iguales si contienen los mismos pares (clave, valor), en el mismo orden (lo que importa para claves duplicadas).

Esta función requiere que los tipos de clave y valor implementen operator==().

Véase también operator!=().

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

Lee un mapa del flujo in en map.

Esta función requiere que los tipos clave y valor implementen operator>>().

Véase también Formato de los operadores 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.