Biblioteca de plantillas de clase estándar c ++ STL (contenedores asociativos (mapa, plantillas de clase multimapa), los métodos de asignación de estos dos contenedores son diferentes de los demás)

Este blog se hace cargo de los contenedores asociativos (conjunto, multiconjunto) del blog anterior, los cuales tienen similitudes y diferencias. Los datos y valores clave de los elementos en los tipos de mapa y multimapa están separados, mientras que conjunto, multiconjunto Los datos y el valor clave de los elementos en el tipo de conjunto múltiple es una ubicación, es decir, los datos almacenados también se denominan la clave de los datos.

contenedor de mapas

La sintaxis para crear una plantilla de clase de mapa es la siguiente:

std::map<key,type,predicate> name;

Este método crea un objeto de mapa vacío llamado nombre que contiene datos de tipo tipo. Este objeto utiliza la función especificada por el predicado para ordenar los elementos de la colección. Por ejemplo, para crear un objeto de mapa vacío para enteros, escriba:

std::map<int,int,std::less<int>> intmap;

 map<clave,tipo,predicado> nombre(mimapa);

//Este método utiliza el constructor de copias para generar un objeto de mapa a partir de un mapa existente mymap.

map<clave,tipo,predicado> nombre(nombre,apellido);

//Este método crea un mapa a partir de un rango de elementos basado en las posiciones inicial y final indicadas por los punteros múltiples.

La descripción del método en la plantilla de clase de mapa se muestra en la tabla:


función ilustrar
comenzar Devuelve un iterador que apunta al primer elemento de la colección.
fin Devuelve un iterador que apunta al último elemento de la colección.
claro eliminar todos los elementos del conjunto
vacío Determine si la colección está vacía, si está vacía devuelve verdadero
igual_rango(x) Devuelve dos iteradores que representan los límites inferior y superior de x, donde el límite inferior representa el primer elemento de la colección con un valor igual a x y el límite superior representa el primer elemento con un valor mayor que x
borrar (yo) Elimine el elemento de colección señalado por el iterador, o elimine el elemento de colección por valor clave
borrar(x) elimina el elemento con valor x del conjunto
encontrar (x) Devuelve un iterador que apunta a x, si x no existe, el iterador devuelto es igual al final
límite_inferior(x) Devuelve un iterador que apunta al elemento anterior e inmediatamente adyacente a x
tamaño máximo Devuelve el contenedor más grande para la colección.
empezar Devuelve un iterador inverso que apunta al último elemento de la colección.
desgarrar Devuelve un iterador inverso que apunta al primer elemento de la colección.
tamaño Devuelve el tamaño de la colección.
intercambio() intercambia el contenido de dos colecciones
límite_superior(x) devuelve un contenedor que apunta a x
valor_comp Devuelve un objeto de tipo value_compare, que se utiliza para determinar el orden de los elementos en la colección.

Por ejemplo, cree un objeto de mapa y agregue nuevos elementos mediante la inserción:

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<int,char> imap;    //创建map映射对象
	imap.insert(map<int,char>::value_type(1,'c'));    //插入新元素(与之前的插入有所不同)
	imap.insert(map<int,char>::value_type(4,'a'));
	imap.insert(map<int,char>::value_type(3,'d'));
	imap.insert(map<int,char>::value_type(15,'f'));
	map<int,char>::iterator it;
	for(it=imap.begin();it!=imap.end();it++)        //循环map映射显示元素值
	{    
		cout<<(*it).first<<"->";
		cout<<(*it).second<<endl;
	}
	return 0;	
} 

 El resultado de la operación es el siguiente:

Se puede ver a partir de los resultados de la ejecución que el contenedor se ordena por el código de recuperación anterior en lugar de los datos en sí, y la inserción y la salida transversal de este tipo de plantilla son diferentes de la plantilla anterior, utilizándola.primero para representar la primera Un código de recuperación, it.second representa los segundos datos, y luego la inserción está usando imap.insert(map<int,char>::value_type()), la diferencia es que se usan los datos de value_type.

Tenga en cuenta que estas dos plantillas de clase almacenan datos de cadena de forma diferente a otras operaciones de plantilla de clase.Las operaciones específicas son las siguientes:

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<double,string> mm;
	mm.insert(pair<double,string>(5.24,string("李牧歌")));    //用pair的格式插入数据
	mm.insert(make_pair(3.21,string("侯伊美")));        //使用make_pair存储数据
	mm.insert(make_pair(10.9,string("王润怡")));
	mm.insert(make_pair(9.21,string("王俐元")));
	map<double,string>::iterator it=mm.begin();
	cout<<"mm:"<<endl;
	while(it!=mm.end())
	{
		cout<<"生日"<<it->first<<endl;
		cout<<"姓名"<<it->second<<endl;
		cout<<endl; 
		*it++;	
	}	
	return 0;	
} 

Los resultados de ejecución específicos son los siguientes (las edades también están ordenadas):

 Específicamente, se usan dos formatos para insertar datos de cadena, make_pair y pair.Creo que el primer método es más conveniente de operar. También puede asignar mm[1.5]=string("hym) directamente en forma de matriz ; preste especial atención al hecho de que la asignación aquí es diferente de la de otras plantillas de clase, por lo que debe prestar especial atención.

contenedor multimapa


        Multimap puede almacenar un conjunto de valores secuencialmente. Es lo mismo que el mapa en que cada elemento puede contener un valor clave y elementos de datos asociados. A diferencia del mapa, el multimapa puede contener datos repetidos, pero no se puede usar [] el operador asigna valores a múltiples elementos.

La instrucción para construir la plantilla de clase multimapa es la siguiente:

std::multimap<key,type,predicate> name;

        Este método crea un objeto multimapa vacío llamado nombre que contiene un tipo de datos de tipo. Este objeto utiliza la función especificada por el predicado para ordenar los elementos de la colección. Por ejemplo, para crear un objeto multimapa vacío para enteros, puede escribir:

std::multimap<int,int,std::less<int> > intmap;
//注意《int》后需要敲一个空格

multimapa<clave,tipo,predicado> nombre(mimapa);

//Este método usa el constructor de copias para generar un objeto multimapa a partir de un mapa existente mymap.

multimap<clave,tipo,predicado> nombre(nombre,apellido);

//Este método crea un mapa a partir de un rango de elementos basado en las posiciones inicial y final indicadas por los punteros múltiples.

La mayor diferencia entre este y la plantilla de clase de mapa es que [] no se puede usar para asignar valores a los elementos de la colección, y sus elementos de datos pueden aparecer repetidamente, como se muestra en el siguiente código:

#include<iostream>
#include<map>
using namespace std;
int main()
{
	multimap<double,char> Cmap;
	Cmap.insert(make_pair(1,'c'));
	Cmap.insert(make_pair(4,'c'));
	Cmap.insert(make_pair(2,'b'));
	Cmap.insert(make_pair(6,'r'));
	Cmap.insert(make_pair(13,'a'));
	cout<<"Cmap :"<<endl;
	map<double,char>::iterator it=Cmap.begin();
	while(it!=Cmap.end())
	{
		cout<<" "<<it->first;
		cout<<" "<<it->second<<endl;
		cout<<endl; 
		*it++;	
	}	
	return 0;	
} 

También puede usar el método pair para asignar valores, y también puede usar map<int,cahr>::value_type() para realizar operaciones de asignación. Si tiene alguna operación de asignación conveniente y simple, espero que pueda compartirla en el área de comentarios Para este multimapa, el método de uso en la plantilla de clase es exactamente el mismo que el de la plantilla de clase de mapa, por lo que no hay un diagrama de su método de uso aquí, y solo es necesario distinguir la diferencia entre él y el mapa. plantilla de clase.

        Este es el final de este blog. Prometí actualizar el blog el miércoles, pero participé en algunas actividades escolares y competencias el miércoles, así que el miércoles estuvo muy ocupado y no actualicé el blog. La clase de hoy es un poco menos Después de escribir el blog, espero que pueda leer estos blogs sobre la biblioteca de plantillas estándar STL, puede tener una cierta comprensión de la biblioteca de plantillas estándar STL y, si está interesado, puede bajar y pensar en el código usted mismo. Es mejor usar tu cerebro que hacerlo. El próximo blog debería ser sobre un algoritmo de módulo más importante en la biblioteca de plantillas STL. Puede prestar atención al contenido de seguimiento (de todos modos, no prometo actualizar el blog esta vez, y lo más importante es actualizar el blog como quieras.) Cada vez que puedo aprender algunos pequeños puntos de conocimiento que no he descubierto antes cuando actualizo un blog. Puede ser que no aprendí con mucho cuidado cuando estaba estudiando jajaja, así que siempre debemos practicar y no te imagines. El programa puede agotarse y seguir tu imaginación. Es totalmente diferente.

Supongo que te gusta

Origin blog.csdn.net/m0_61886762/article/details/124158923
Recomendado
Clasificación