El mapa almacena pares clave-valor únicos de forma ordenada. Cada clave está asociada de forma única con un valor que puede o no ser único. Una clave se puede insertar o eliminar de un mapa, pero no se puede modificar. Los valores asignados a las teclas se pueden cambiar. Es una excelente manera de acceder rápidamente al valor usando la tecla y se realiza en tiempo O (1).
C++
#include <iostream> #include <iterator> #include <map> using namespace std; int main() { // empty map container map<int, int> gquiz1; // 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>(4, 20)); gquiz1.insert(pair<int, int>(5, 50)); gquiz1.insert(pair<int, int>(6, 50)); gquiz1.insert(pair<int, int>(7, 10)); // printing map gquiz1 map<int, int>::iterator itr; cout << "\nThe map 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; // assigning the elements from gquiz1 to gquiz2 map<int, int> gquiz2(gquiz1.begin(), gquiz1.end()); // print all elements of the map gquiz2 cout << "\nThe map 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 // element with key=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 map 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; }
El mapa gquiz1 es:
ELEMENTO CLAVE
1 40
2 30
3 60
4 20
5 50
6 50
7 10El mapa gquiz2 después de asignar desde gquiz1 es:
ELEMENTO CLAVE
1 40
2 30
3 60
4 20
5 50
6 50
7 10gquiz2 después de la eliminación de elementos menores que key=3:
ELEMENTO CLAVE
3 60
4 20
5 50
6 50
7 10gquiz2.erase(4): 1 eliminado
ELEMENTO CLAVE
3 60
5 50
6 50
7 10gquiz1.lower_bound(5) : CLAVE = 5 ELEMENTO = 50
gquiz1.upper_bound(5) : CLAVE = 6 ELEMENTO = 50
Multimap es similar al mapa con la adición de que varios elementos pueden tener las mismas claves. Además, NO se requiere que el par de valor de clave y valor asignado sea único 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.
C++
#include <iostream> #include <iterator> #include <map> using namespace std; int main() { // empty multimap container multimap<int, int> gquiz1; // 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; }
El multimapa gquiz1 es:
ELEMENTO CLAVE
1 40
2 30
3 60
6 50
6 10El multimapa gquiz1 después de agregar elementos adicionales es:
ELEMENTO CLAVE
1 40
2 30
3 60
4 50
5 10
6 50
6 10El multimapa gquiz2 después de la asignación de gquiz1 es:
ELEMENTO CLAVE
1 40
2 30
3 60
4 50
5 10
6 50
6 10gquiz2 después de la eliminación de elementos menores que key=3:
ELEMENTO CLAVE
3 60
4 50
5 10
6 50
6 10gquiz2.erase(4): 1 eliminado
ELEMENTO CLAVE
3 60
5 10
6 50
6 10gquiz1.lower_bound(5) : CLAVE = 5 ELEMENTO = 10
gquiz1.upper_bound(5) : CLAVE = 6 ELEMENTO = 50
Diferencia entre Map y Multimap en C++ STL
No. S. | Mapa | multimapa |
1 | Almacena un par clave-valor único donde cada clave es única. | Puede almacenar pares clave-valor duplicados donde las claves pueden no ser únicas. |
2 | El uso de la función count() en un mapa solo puede devolver dos valores, que es 0 o 1. | El uso de la función count() en un mapa múltiple puede devolver cualquier número entero no negativo. |
3 | Acceder al valor de cualquier clave es fácil y directamente accesible. | Acceder al valor de cualquier clave no es fácil y no es directamente accesible. |
4 | Eliminar en un mapa usando clave eliminará solo un par clave-valor. | Eliminar en un mapa múltiple usando la clave eliminará todo el par clave-valor que tenga la misma clave. |
5 | El mapa se puede usar cuando se requiere una tabla de búsqueda simple que tenga pares clave-valor únicos para acceder rápidamente al valor usando la clave. | Multimap se puede usar cuando se requiere agrupar valores usando las claves. |
Publicación traducida automáticamente
Artículo escrito por varshapoddar2402 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA