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; }
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; }
Key Value [ 5 3 13 ] 3 [ 8 9 13 ] 7 Key Value 3 [ 5 3 13 ] 7 [ 8 9 13 ]