Establecer vs mapa en c ++

Establecer vs mapa en c ++
El objetivo de este artículo es dar las similitudes y diferencias entre un conjunto y un mapa. "VS" en el título significa "versus". En primer lugar, ¿qué es un set?? - Un conjunto en C ++ es como el conjunto en matemáticas. En C ++, un conjunto es un grupo de valores no necesariamente no relacionados, sino del mismo tipo. Los valores de un conjunto se llaman claves en c++.

¿Qué es un mapa?? - Un mapa es un conjunto de pares de clave/valor. En C ++, las teclas son del mismo tipo, y los valores también son del mismo tipo. Hay multiset y hay multimap. Un Multiset es un conjunto donde los valores no son únicos; es decir, puede haber más de uno de los mismos valores. No olvide que los valores del conjunto se llaman claves en c++. En un mapa, algunos de los valores pueden ser los mismos, pero las teclas deben ser diferentes (únicas). En un multimap, puede haber más de una clave, que son la misma.

El título de este artículo es "Establecer vs mapa en C ++". Entonces, Multiset y MultiMap no se consideran en este artículo; Solo se comparan y contrasta el mapa y se contrastan.

Cada vez que se inserta una tecla en un conjunto, el conjunto se vuelve a clasificar. Nota: Un conjunto en C ++ también puede tener pares de teclas/valor; y esta no es una visión matemática del set. - Aún así, en C ++, un conjunto puede tener pares de clave/valor. Entonces, cada vez que se inserta un par de teclas/valor en un conjunto, el conjunto se reorensa por teclas. Por otro lado, un mapa por definición consiste en pares de clave/valor donde las claves no tienen duplicado. Con el mapa también, cada vez que se inserta un par de teclas/valor en el mapa, el mapa se reorensa con teclas. El conjunto y el mapa son los mismos a este respecto.

Tanto el conjunto como el mapa tienen la especialización de plantilla de comparación. Ambos son contenedores asociativos. Para cualquiera de ellos, para que la estructura de datos se ordene ascendiendo, use la especialización de plantilla de comparación, menos, reemplazando la "clave", con el tipo de tecla. Para cualquiera de ellos, para que la estructura de datos descendiera, use la especialización de plantilla de comparación, mayor, reemplazando la "clave", con el tipo de tecla. Para los dos, menos es el valor predeterminado.

Para ambas estructuras de datos, las funciones de los miembros son categorías en las siguientes categorías: construcciones (incluidas copias y asignación), iteradores, modificadores, observadores, operaciones e intercambio. En todas estas categorías, las funciones del miembro tanto para el conjunto como para el mapa son similares.

La estructura de datos establecida no tiene la categoría de acceso al elemento, pero el mapa sí. La categoría de acceso al elemento consta de los operadores de soportes cuadrados y las funciones de miembro AT () que se utilizan como las contrapartes para el vector. Se utilizan para acceder (escanear) cada uno de los elementos en el mapa. El conjunto no tiene estos operadores o funciones. Para el conjunto, se accede a elementos utilizando iteradores. También se puede acceder a elementos para el mapa utilizando iteradores similares.

Arriba son las principales similitudes y diferencias para el conjunto y el mapa. La peculiaridad en esta comparación es con el uso de pares de clave/valor. El par de clave/valor es de la estructura llamada par en la biblioteca de utilidad C ++. El resto de este artículo ofrece una breve descripción de cómo se emplea el par tanto en el conjunto como en el mapa, comenzando con lo que es un par:

Par

La sintaxis de un par literal es:

valor clave

Una serie de tales pares que consistirían en un conjunto o mapa es:

"limones", 8
"naranjas", 5
"peras", 12

Esto representa una estructura de datos de frutas y sus números que se encuentran en una canasta. La clave para cada par es el tipo de cadena; y el valor para cada par es el tipo entero. El siguiente programa construye tres pares diferentes del mismo valor_type, string/int:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

par pr1 = "limones", 8;
par pr2 = "naranjas", 5;
par pr3 = "peras", 12;
regresar 0;

Tenga en cuenta que se incluyó la biblioteca de servicios públicos. Los nombres de los pares son PR1, PR2 y PR3. Son del mismo valor_type, string/int.

La clave/valor de un par no debe ser necesariamente string/int. Puede ser iterador/bool con la sintaxis literal:

iterador, bool

En un objeto de par, bool es verdadero o falso, y el iterador es el nombre del iterador. Es este tipo de par el que se devuelve cuando un par de clave/valor, como un par de cadenas/int, se inserta en un conjunto o un mapa. El componente bool es cierto, si y solo si se produjo la inserción del par. El componente iterador apunta al elemento insertado particular (clave y valor) en su conjunto.

La clave de un par se llama "primero" en C ++; y el valor del par se llama "segundo".

Construcciones establecidas y de mapa

Colocar
Un conjunto vacío de pares String/int se construiría de la siguiente manera:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocar> st;
regresar 0;

La especialización de la plantilla clave es "par", y se considera un componente. El único componente se refiere al par (de clave/valor).

Mapa
Un mapa vacío de pares String/int se construiría de la siguiente manera:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

mapa MP;
regresar 0;

Aquí, la especialización de la plantilla comienza con la clave y luego el valor. La especialización de la plantilla de clave es "cadena" y la especialización de plantilla de valor es "int". Hay dos componentes para el mapa, que son la clave y el valor. Para el conjunto, hay un componente que consta de dos componentes internos. Tenga en cuenta la diferencia.

Inserción

Colocar
El siguiente código de función C ++ Main () muestra cómo los pares se pueden insertar en un conjunto e imprimir (se muestra en la pantalla):

par pra = "peras", 12, prb = "oranges", 5, prc = "limones", 8;
colocar> st;
calle.insertar (pra); calle.insertar (PRB); calle.insertar (PRC);
para (establecer> :: iterator iter = st.comenzar(); iter != ST.fin(); iter ++)
cout << iter->primero << " => " << iter->segundo << endl;

La salida es:

limones => 8
naranjas => 5
peras => 12

Tenga en cuenta que aunque los pares de clave/valor no fueron insertados en orden ascendente por claves, los elementos se clasifican internamente por teclas. El conjunto siempre ordenará sus elementos por teclas, ya sean parejas o no.

Mapa
El siguiente código de función Main () muestra cómo se pueden insertar pares en un mapa e imprimir (se muestra en la pantalla):

par pra = "peras", 12, prb = "oranges", 5, prc = "limones", 8;
mapa MP;
diputado.insertar (pra); diputado.insertar (PRB); diputado.insertar (PRC);
para (mapa:: iterator iter = mp.comenzar(); iter != MP.fin(); iter ++)
cout << iter->primero << " => " << iter->segundo << endl;

La salida es:

limones => 8
naranjas => 5
peras => 12

Aunque las teclas no se insertaron los pares de clave/valor en orden ascendente, los elementos donde se clasifican internamente por las teclas. El mapa siempre ordenará sus elementos por teclas.

Conclusión

Las similitudes y diferencias entre un conjunto y un mapa en C ++ se aprecian fácilmente de sus diferentes definiciones. La peculiaridad surge cuando se trata de parejas. En C ++, un conjunto puede tener pares que no son realmente lo que sugieren las matemáticas. Aun así, el programador necesita saber cómo manejar pares para un set y para un mapa.