Mapa de list y forward_list en C++ STL con ejemplos

Los mapas son contenedores asociativos que almacenan elementos en forma de mapa. Cada elemento tiene un valor clave y un valor asignado. Dos valores asignados no pueden tener los mismos valores clave.

Las listas son contenedores de secuencias que permiten la asignación de memoria no contigua. En comparación con el vector, la lista tiene un recorrido lento, pero una vez que se ha encontrado una posición, la inserción y la eliminación son rápidas. Una lista simplemente significa una lista con enlaces dobles y para una lista con enlaces simples se usa la Lista directa. 

Mapa de Lista en STL

Un mapa de listas puede ser muy útil para diseñar estructuras de datos complejas.

Sintaxis:

map<datatype, list<datatype>> map_of_list 
This stores a list corresponding to a datatype

or

map<list<datatype>, datatype> map_of_list
This stores a datatype corresponding to a list

A continuación se muestra la implementación del Mapa de Lista en C++-

C++

// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
  
void printMapContent1(map<list<int>,
                          int>& mapOfList)
{
    cout << "   Key         Value"
         << "\n\n";
    for (auto p : mapOfList) {
        // Key is a list of integers
        list<int> ourList = p.first;
  
        // Value is an integer
        int val = p.second;
  
        // Printing list elements
        cout << "[ ";
        for (auto it = ourList.begin();
             it != ourList.end(); it++) {
            // Dereferencing value pointed by
            // iterator
            cout << (*it) << ' ';
        }
  
        cout << ']';
  
        cout << "     ";
  
        // Printing value
        cout << mapOfList[ourList] << '\n';
    }
}
  
void printMapContent2(map<int,
                          list<int> >& mapOfList)
{
  
    cout << "   Key         Value"
         << "\n\n";
    for (auto p : mapOfList) {
        // Key is an integer
        int key = p.first;
  
        // Value is a list of integers
        list<int> ourList = p.second;
  
        cout << "   ";
        cout << key << "          ";
  
        // Printing list elements
        cout << "[ ";
        for (auto it = ourList.begin();
             it != ourList.end(); it++) {
            // Dereferencing value pointed by
            // iterator
            cout << (*it) << ' ';
        }
  
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a list of integers
    list<int> ourList1;
  
    // Inserting elements at the
    // back of list
    ourList1.push_back(2);
    ourList1.push_back(10);
    ourList1.push_back(13);
  
    // Declaring another list
    list<int> ourList2;
  
    // Inserting elements at the back
    // of list
    ourList2.push_back(7);
    ourList2.push_back(14);
    ourList2.push_back(22);
  
    // Declaring a map where key is a list
    // and value is integer itself
    map<list<int>, int> mapOfList1;
  
    mapOfList1[ourList1] = 5;
    mapOfList1[ourList2] = 10;
  
    // Printing the contents of the map
    printMapContent1(mapOfList1);
  
    // Declaring a map where key is integer
    // and value is a list of integers
    map<int, list<int> > mapOfList2;
  
    cout << "\n\n";
    mapOfList2[3] = ourList1;
    mapOfList2[7] = ourList2;
  
    printMapContent2(mapOfList2);
  
    return 0;
}
Producción

   Key         Value

[ 2 10 13 ]     5
[ 7 14 22 ]     10


   Key         Value

   3          [ 2 10 13 ]
   7          [ 7 14 22 ]

Lista de reenvío en STL 

las listas, allowforward_list también se pueden usar con el contenedor de mapas.

Sintaxis: 

map<datatype, forward_list<datatype>> map_of_list
This stores a forward list corresponding to a datatype

or

map<forward_list<datatype>, datatype> map_of_list
This stores a datatype corresponding to a forward list

A continuación se muestra la implementación de forward_list en C++- 

C++

// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
  
void printMapContent1(map<forward_list<int>,
                          int>& mapOfList)
{
    cout << "   Key         Value"
         << "\n\n";
    for (auto p : mapOfList) {
        // Key is a list of integers
        forward_list<int> ourList = p.first;
  
        // Value is an integer
        int val = p.second;
  
        // Printing list elements
        cout << "[ ";
        for (auto it = ourList.begin();
             it != ourList.end(); it++) {
            // Dereferencing value pointed by
            // iterator
            cout << (*it) << ' ';
        }
  
        cout << ']';
        cout << "     ";
  
        // Printing value
        cout << mapOfList[ourList] << '\n';
    }
}
  
void printMapContent2(map<int,
                          forward_list<int> >& mapOfList)
{
  
    cout << "   Key         Value"
         << "\n\n";
    for (auto p : mapOfList) {
        // Key is an integer
        int key = p.first;
  
        // Value is a list of integers
        forward_list<int> ourList = p.second;
  
        cout << "   ";
        cout << key << "          ";
  
        // Printing list elements
        cout << "[ ";
        for (auto it = ourList.begin();
             it != ourList.end(); it++) {
            // Dereferencing value pointed by
            // iterator
            cout << (*it) << ' ';
        }
  
        cout << ']';
        cout << "\n";
    }
}
  
// Driver code
int main()
{
    // Declaring forward list
    forward_list<int> forwardList1;
  
    // Declaring another forward list
    forward_list<int> forwardList2;
  
    // Assigning values using assign()
    forwardList1.assign({ 5, 3, 13 });
    forwardList2.assign({ 8, 9, 13 });
  
    map<forward_list<int>,
        int>
        mapOfList1;
  
    mapOfList1[forwardList1] = 3;
    mapOfList1[forwardList2] = 7;
  
    printMapContent1(mapOfList1);
    cout << "\n\n";
  
    map<int,
        forward_list<int> >
        mapOfList2;
  
    mapOfList2[3] = forwardList1;
    mapOfList2[7] = forwardList2;
  
    printMapContent2(mapOfList2);
    return 0;
}
Producción

   Key         Value

[ 5 3 13 ]     3
[ 8 9 13 ]     7


   Key         Value

   3          [ 5 3 13 ]
   7          [ 8 9 13 ]

Publicación traducida automáticamente

Artículo escrito por bhuwanesh 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 *