Multimapa en la biblioteca de plantillas estándar (STL) de C++

Multimap es similar a un mapa con la adición de que varios elementos pueden tener las mismas claves. Además, NO se requiere que el par clave-valor y el valor asignado sean únicos en este caso. Una cosa importante a tener en cuenta sobre multimapa es que multimapa siempre mantiene todas las claves ordenadas. Estas propiedades de multimapa lo hacen muy útil en la programación competitiva.

Algunas funciones básicas asociadas con multimapa: 

  • begin() – Devuelve un iterador al primer elemento en el mapa múltiple
  • end() : devuelve un iterador al elemento teórico que sigue al último elemento en el mapa múltiple
  • size() – Devuelve el número de elementos en el mapa múltiple
  • max_size() : devuelve el número máximo de elementos que puede contener el mapa múltiple
  • vacío() – Devuelve si el mapa múltiple está vacío
  • pair<int,int> insert(keyvalue,multimapvalue) – Agrega un nuevo elemento al multimapa

Implementación de C++ para ilustrar las funciones anteriores: 

CPP

// CPP Program to demonstrate the implementation of multimap
#include <iostream>
#include <iterator>
#include <map>
using namespace std;
 
// Driver Code
int main()
{
    multimap<int, int> gquiz1; // empty multimap container
 
    // insert elements in random order
    gquiz1.insert(pair<int, int>(1, 40));
    gquiz1.insert(pair<int, int>(2, 30));
    gquiz1.insert(pair<int, int>(3, 60));
    gquiz1.insert(pair<int, int>(6, 50));
    gquiz1.insert(pair<int, int>(6, 10));
 
    // printing multimap gquiz1
    multimap<int, int>::iterator itr;
    cout << "\nThe multimap gquiz1 is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // adding elements randomly,
    // to check the sorted keys property
    gquiz1.insert(pair<int, int>(4, 50));
    gquiz1.insert(pair<int, int>(5, 10));
 
    // printing multimap gquiz1 again
 
    cout << "\nThe multimap gquiz1 after adding extra "
            "elements is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // assigning the elements from gquiz1 to gquiz2
    multimap<int, int> gquiz2(gquiz1.begin(), gquiz1.end());
 
    // print all elements of the multimap gquiz2
    cout << "\nThe multimap gquiz2 after assign from "
            "gquiz1 is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // remove all elements up to
    // key with value 3 in gquiz2
    cout << "\ngquiz2 after removal of elements less than "
            "key=3 : \n";
    cout << "\tKEY\tELEMENT\n";
    gquiz2.erase(gquiz2.begin(), gquiz2.find(3));
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
 
    // remove all elements with key = 4
    int num;
    num = gquiz2.erase(4);
    cout << "\ngquiz2.erase(4) : ";
    cout << num << " removed \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
 
    cout << endl;
 
    // lower bound and upper bound for multimap gquiz1 key =
    // 5
    cout << "gquiz1.lower_bound(5) : "
         << "\tKEY = ";
    cout << gquiz1.lower_bound(5)->first << '\t';
    cout << "\tELEMENT = " << gquiz1.lower_bound(5)->second
         << endl;
    cout << "gquiz1.upper_bound(5) : "
         << "\tKEY = ";
    cout << gquiz1.upper_bound(5)->first << '\t';
    cout << "\tELEMENT = " << gquiz1.upper_bound(5)->second
         << endl;
 
    return 0;
}
Producción

The multimap gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    6    50
    6    10


The multimap gquiz1 after adding extra elements is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10


The multimap gquiz2 after assign from gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10


gquiz2 after removal of elements less than key=3 : 
    KEY    ELEMENT
    3    60
    4    50
    5    10
    6    50
    6    10

gquiz2.erase(4) : 1 removed 
    KEY    ELEMENT
    3    60
    5    10
    6    50
    6    10

gquiz1.lower_bound(5) :     KEY = 5        ELEMENT = 10
gquiz1.upper_bound(5) :     KEY = 6        ELEMENT = 50

Lista de funciones de Multimap

Función

Definición

multimapa::operador= Se utiliza para asignar nuevos contenidos al contenedor reemplazando los contenidos existentes.
multimap::crbegin() y multimap::crend() crbegin() devuelve un iterador inverso constante que se refiere al último elemento en el contenedor multimapa. crend() devuelve un iterador inverso constante que apunta al elemento teórico antes del primer elemento en el mapa múltiple.
multimapa::emplace_hint() Inserte la clave y su elemento en el contenedor multimapa con una pista determinada.
borrado multimapa() Elimina todos los elementos del mapa múltiple.
multimapa vacío() Devuelve si el mapa múltiple está vacío.
maxsize multimapa() Devuelve el número máximo de elementos que puede contener un contenedor multimapa.
multimapa value_comp()  Devuelve el objeto que determina cómo se ordenan los elementos en el mapa múltiple (‘<‘ por defecto).
desgarro multimapa Devuelve un iterador inverso que apunta al elemento teórico que precede al primer elemento del contenedor multimapa.
multimapa::cbegin() y multimapa::cend() cbegin() devuelve un iterador constante que se refiere al primer elemento en el contenedor multimapa. cend() devuelve un iterador constante que apunta al elemento teórico que sigue al último elemento en el mapa múltiple.
multimapa::intercambiar() Intercambia el contenido de un multimapa con otro multimapa del mismo tipo y tamaño.
inicio multimapa Devuelve un iterador que apunta al último elemento del contenedor.
tamaño multimapa() Devuelve el número de elementos en el contenedor multimapa.
multimapa::emplazar()  Inserta la clave y su elemento en el contenedor multimapa.
multimap::begin() y multimap::end() begin() devuelve un iterador que se refiere al primer elemento en el contenedor multimapa. end() devuelve un iterador al elemento teórico que sigue al último elemento en el mapa múltiple.
multimapa upper_bound() Devuelve un iterador al primer elemento que es equivalente al valor multiasignado con clave-valor ‘g’ o definitivamente irá tras el elemento con clave-valor ‘g’ en el multimapa.
multimapa::contar() Devuelve el número de coincidencias con el elemento con clave-valor ‘g’ en el mapa múltiple.
multimapa::clear()  Elimina el valor clave del mapa múltiple.
multimapa::buscar() Devuelve un iterador al elemento con clave-valor ‘g’ en el mapa múltiple si lo encuentra; de lo contrario, devuelve el iterador al final.
multimapa igual_range() Devuelve un iterador de pares. El par se refiere a los límites de un rango que incluye todos los elementos en el contenedor que tienen una clave equivalente a k.
inserción multimapa() Se utiliza para insertar elementos en el contenedor multimapa.
límite_inferior multimapa() Devuelve un iterador al primer elemento que es equivalente al valor multiasignado con clave-valor ‘g’ o definitivamente no irá antes del elemento con clave-valor ‘g’ en el multimapa.
tecla_comp multimapa()  Devuelve el objeto que determina cómo se ordenan los elementos en el mapa múltiple (‘<‘ por defecto).

Artículos recientes en Multimapa

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *