Cómo usar el mapa desordenado C ++

Cómo usar el mapa desordenado C ++
Un mapa, también conocido como una matriz asociativa, es una lista de elementos, donde cada elemento es un par de clave/valor. Entonces, cada clave corresponde a un valor. Diferentes claves pueden tener el mismo valor, para el trabajo ordinario. Por ejemplo, las teclas pueden ser una lista de frutas y los valores correspondientes, los colores de las frutas. En C ++, el mapa se implementa como una estructura de datos con funciones y operadores miembros. Un mapa ordenado es uno en el que los pares de elementos han sido ordenados por teclas. Un mapa desordenado es uno donde no hay pedido. Este artículo explica cómo usar el mapa desordenado C ++, escrito como undered_map. Necesita conocimiento en consejos de C ++ para comprender este artículo. unordered_map es parte de la biblioteca estándar de C ++.

Clase y objetos

Una clase es un conjunto de variables y funciones que funcionan juntas, donde las variables no tienen valores asignados a. Cuando los valores se asignan a las variables, la clase se convierte en un objeto. Diferentes valores dados a la misma clase dan como resultado diferentes objetos; es decir, diferentes objetos son la misma clase con diferentes valores. Se dice que crear un objeto a partir de una clase está instanciando el objeto.

El nombre, undered_map, es una clase. Un objeto creado a partir de la clase undered_map tiene un nombre de programador elegido.

Se necesita una función que pertenece a una clase para instanciar un objeto de la clase. En C ++, esa función tiene el mismo nombre que el nombre de la clase. Los objetos creados (instanciados) de la clase tienen diferentes nombres dados a ellos, por el programador.

Crear un objeto a partir de la clase significa construir el objeto; También significa instanciar.

Un programa C ++ que utiliza la clase Unordered_Map, comienza con las siguientes líneas en la parte superior del archivo:

#incluir
#incluir
usando el espacio de nombres STD;

La primera línea es para entrada/salida. La segunda línea es permitir que el programa use todas las características de la clase UNDERED_MAP. La tercera línea permite que el programa use los nombres en el espacio de nombres estándar.

Sobrecargar una función

Cuando dos o más firmas de funciones diferentes tienen el mismo nombre, se dice que ese nombre está sobrecargado. Cuando se llama a una función, el número y el tipo de argumentos, determine qué función se ejecuta realmente.

Construcción/copia Construcción

Construcción simple

Se puede construir un mapa desordenado y se asigna valores de la siguiente manera:

desordenable_map UMAP;
umap ["plátano"] = "amarillo";
umap ["uva"] = "verde";
umap ["fig"] = "púrpura";

La declaración comienza con la especialización de la plantilla con los tipos para los pares de clave y valor. Esto es seguido por el nombre elegido del programador para el mapa; Entonces un punto y coma. El segundo segmento de código muestra cómo asignar valores a sus claves.
Construcción por inicializador_list
Esto puede hacerse de la siguiente manera:

desordenable_map umap ("plátano", "amarillo",
"uva", "verde", "fig", "púrpura");

Construcción asignando inicializador_list
Ejemplo:

desordenable_map umap = "plátano", "amarillo",
"uva", "verde", "fig", "púrpura";

Construcción copiando otro ORDERED_MAP
Ejemplo:

desordenable_map UMAP1 ("plátano", "amarillo",
"uva", "verde", "fig", "púrpura");
desordenable_map UMAP2 (UMAP1);

El elemento de par

El siguiente código muestra cómo crear y acceder al elemento de par:

par pr = 'd', "mar";
cout << pr.first << '\n';
cout << pr.second << '\n';

La salida es:

d
mar

Primero y segundo son palabras reservadas para los dos elementos de la par. Los valores en el par aún se pueden cambiar utilizando el primer y el segundo.

Se llama un par, value_type en el tema del mapa desordenado.

Acceso de elemento undered_map

Mapped_Type & Operator [] (key_type && k)
Devuelve el valor para la clave correspondiente. Ejemplo:

desordenable_map UMAP;
umap ["plátano"] = "amarillo";
umap ["uva"] = "verde";
umap ["fig"] = "púrpura";
const char *ret = umap ["uva"];
cout << ret <<'\n';

La salida es: "verde". Los valores se pueden asignar de la misma manera: ver arriba.

capacidad de desordenada_map

size_type size () const noexcept
Devuelve el número de pares en el mapa.

desordenable_map UMAP;
umap ["plátano"] = "amarillo";
umap ["uva"] = "verde";
umap ["fig"] = "púrpura";
cout << umap.size() <<'\n';

La salida es 3.

bool vacía () const noexcept

Devuelve 1 para verdadero si el mapa no tiene par, y 0 para falso si tiene pares. Ejemplo:

desordenable_map UMAP;
cout << umap.empty() <<'\n';

La salida es 1.

Iteradores que regresan y la clase de mapa desordenado

Un iterador es como un puntero pero tiene más funcionalidad que el puntero.

begin () noexcept

Devuelve un iterador que apunta al primer par del objeto MAP, como en el siguiente segmento de código:

desordenable_map UMAP;
umap ["plátano"] = "amarillo"; umap ["uva"] = "verde"; umap ["fig"] = "púrpura";
desordenable_map:: iterator iter = umap.comenzar();
par pR = *iter;
cout << pr.first << ", " << pr.second << '\n';

La salida es: Fig, morado. El mapa no está ordenado.

begin () const noexcept;

Devuelve un iterador que apunta al primer elemento de la colección de objetos de mapa. Cuando la construcción del objeto está precedida por const, la expresión "begin () const" se ejecuta en lugar de "begin ()". Bajo esta condición, los elementos en el objeto no se pueden modificar. Se usa en el siguiente código, por ejemplo.

const nodered_map umap ("plátano", "amarillo",
"uva", "verde", "fig", "púrpura");
desordenable_map:: const_iterator iter = umap.comenzar();
par pR = *iter;
cout << pr.first << ", " << pr.second << '\n';

La salida es: Fig, morado. El mapa no está ordenado. Tenga en cuenta que const_iterator se ha utilizado esta vez, en lugar de solo iterador, para recibir el iterador devuelto.

end () noexcept

Devuelve un iterador que apunta inmediatamente más allá del último elemento del objeto de mapa.

end () const noexcept

Devuelve un iterador que apunta inmediatamente más allá del último elemento del objeto de mapa. Cuando la construcción del objeto MAP está precedida por const, la expresión "end () const" se ejecuta en lugar de "end ()".

Operaciones undered_map

iterator Find (const key_type & k)

Busca un par de la clave dada en el mapa. Si se encuentra, devuelve el iterador. Si no se encuentra, devuelve un iterador que apunta al final del mapa, que no es un par. El siguiente código muestra cómo usar esta función miembro:

desordenable_map UMAP;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
desordenable_map:: iterator iter = umap.encontrar ('c');
Si (UMAP.encontrar ('c') != UMAP.fin())
par pR = *iter;
cout << pr.first << ", " << pr.second << '\n';

La salida es: C, D

const_iterator find (const key_type & k) const;

Esta versión de la función se llama, si la creación del mapa desordenado comienza con const, haciendo todos los elementos del mapa de solo lectura.

Modificadores de Maps de ORDERED

Pare Insert (value_type && obj)
Un mapa desordenado significa que los pares no están en ningún orden. Entonces, el programa inserta el par en cualquier lugar que encuentre conveniente. La función vuelve, par. Si la inserción fuera exitosa, Bool será 1 para verdadero, de lo contrario sería 0 para False. Si la inserción es exitosa, el iterador apuntará al elemento recién insertado. El siguiente código ilustra el uso:

desordenable_map UMAP;
umap ["plátano"] = "amarillo";
umap ["uva"] = "verde";
umap ["fig"] = "púrpura";
UMAP.insert ("cereza", "rojo", "fresa", "rojo");
cout << umap.size() << '\n';

La salida es: 5. Se pueden insertar más de un par.

size_type Erase (const key_type & k)

Esta función borra un par de undered_map. El siguiente segmento de código ilustra:

desordenable_map UMAP;
umap ["plátano"] = "amarillo";
umap ["uva"] = "verde";
umap ["fig"] = "púrpura";
int num = UMAP.borrar ("uva");
cout << umap.size() << '\n';

La salida es 2.
Swap void (undered_map &)
Se pueden intercambiar dos mapas desordenados, como se ilustra en este segmento de código:

desordenable_map umap1 = "plátano", "amarillo",
"uva", "verde", "fig", "púrpura", "fresa", "rojo";
desordenable_map umAp2 = "cereza", "rojo", "lima", "verde";
UMAP1.intercambio (UMAP2);
desordenable_map:: iterator iter1 = UMAP1.comenzar();
par pr1 = *iter1;
desordenable_map:: iterator iter2 = UMAP2.comenzar();
par pR2 = *iter2;
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
desordenable_map umap1 = "plátano", "amarillo",
"uva", "verde", "fig", "púrpura", "fresa", "rojo";
desordenable_map umAp2 = "cereza", "rojo", "lima", "verde";
UMAP1.intercambio (UMAP2);
desordenable_map:: iterator iter1 = UMAP1.comenzar();
par pr1 = *iter1;
desordenable_map:: iterator iter2 = UMAP2.comenzar();
par pR2 = *iter2;
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';

La salida es:

Primera clave y tamaño de UMAP1: lima, 2
Primera llave y tamaño de la fresa UMAP2, 4

El mapa no está ordenado. Tenga en cuenta que la longitud de un mapa aumenta si es necesario. Los tipos de datos deben ser los mismos.

Clase y sus objetos instanciados

Un valor es para un tipo de datos, ya que un objeto instanciado es para una clase. La construcción del mapa desordenado también puede aceptar una clase como tipo de datos. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
clase thecla
público:
int num;
Charch estático;
vacío func (char cha, const char *str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

Diversión nula estática (Char Ch)
if (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

Thecla obj1; Thecla obj2; Thecla obj3; Thecla obj4; THECLA OBJ5;
desordenable_map UMAP;
umap = "plátano", obj1, "uva", obj2, "fig", obj3, "strawberry", obj4, "lim", obj5;
cout << umap.size() << '\n';
regresar 0;

La salida es: 5.

La definición de clase tiene dos datos de datos públicos y dos funciones de miembros públicos. En la función main (), se instancian diferentes objetos para la clase. Luego se instancia un mapa no ordenado, donde cada par consiste en el nombre de una fruta y un objeto de la clase. Se muestra el tamaño del mapa. El programa se compila sin mensaje de advertencia o error.

Aplicación del mapa

La matriz asocia un índice al valor. Los pares de clave/valor existen en muchas situaciones de la vida, que se pueden programar. El par de la llave/valor de la fruta/color es solo un ejemplo. Otro ejemplo es el nombre de las personas y sus edades. En este caso, el par será de tipo, par. También puede ser par. En el último caso, se empleará la Directiva de preprocesamiento. Un par de clave/valor todavía puede ser los nombres de parejas casadas. En países donde hay poligamia, habrá diferentes esposas para un hombre.

Formación de un mapa

Un mapa no es una matriz bidimensional, con dos columnas. Un mapa funciona con una función hash. La clave está codificada por la función hash, en un entero de una matriz. Es esta matriz la que contiene los valores. Por lo tanto, en realidad hay una matriz con los valores, y las teclas se asignan a los índices de la matriz, por lo que se realizan las correspondencias entre claves y valores. El hash es un tema extenso y no está cubierto en este artículo.

Conclusión

Un mapa, también conocido como una matriz asociativa, es una lista de elementos, donde cada elemento es un par de clave/valor. Entonces, cada clave corresponde a un valor. En C ++, el mapa se implementa como una estructura de datos con funciones y operadores miembros. Un mapa ordenado es uno en el que los pares de elementos han sido ordenados por teclas. Un mapa desordenado es uno en el que no hay pedido.

Técnicamente, un hash consiste en elementos de pares. De hecho, el par es una estructura de datos completa con sus funciones y operadores miembros. Los dos parámetros de plantilla para el par son los mismos dos parámetros de plantilla para el_map no ordenado.

El Inicializer_List para el mapa es una matriz literal de literales. Cada literal interno consta de dos objetos, el par de clave/valor.

Las funciones y operadores de miembros para unordered_map se pueden clasificar en los siguientes encabezados: construcción de construcción/copia unorderadas, operaciones undered_map, modificadores undered_map, operaciones undered_map y modificadores_map_map_map.

Se usa un mapa desordenado cuando una clave debe asignarse a un valor.