Entre les moltes operacions disponibles per a “std::map”, la funció “esborrar” destaca com una eina crucial per eliminar els elements basats en les seves claus. Un 'std::map' és un contenidor associatiu organitzat que consta de parells clau-valor. La disposició dels elements dins d'un 'std::map' s'ordena constantment segons les seves claus, facilitant les operacions efectives com ara la cerca, la inserció i la supressió en funció dels valors clau.
Dins de l'àmbit de C++, la funció 'std::map::erase' serveix com a funció membre de la classe 'std::map', que permet l'eliminació d'elements específics del mapa. Es presenta en diverses formes, proporcionant flexibilitat per especificar quins elements esborrar. En aquest article, aprofundirem en els detalls de 'std::map::erase', proporcionant múltiples exemples per il·lustrar la seva versatilitat.
Exemple 1: esborrar per clau
La capacitat d'esborrar els elements mitjançant la clau del 'std::map' és una característica fonamental que ofereix la biblioteca de plantilles estàndard de C++. Aquesta operació s'utilitza habitualment quan necessiteu gestionar i manipular els parells clau-valor d'un programa i proporciona una manera còmoda d'eliminar els elements específics en funció de les seves claus. Crearem un exemple per demostrar com utilitzar el 'std::map' per crear un mapa, esborrar un element per clau i, a continuació, mostrar el mapa modificat.
#inclou
#inclou
int principal ( ) {
std::mapa < int, std::string > el meuMap;
myMap [ 1 ] = 'Vermell' ;
myMap [ 2 ] = 'Blau' ;
myMap [ 3 ] = 'Verd' ;
myMap.erase ( 2 ) ;
per ( const auto & parella: myMap ) {
std::cout << parell.primer << ': ' << parell.segon << std::endl;
}
tornar 0 ;
}
En aquest exemple, comencem per incloure les biblioteques estàndard de C++ necessàries com ara
Per mostrar l'estat resultant del mapa, utilitzem un bucle 'for' que itera per cada parell clau-valor dins de 'myMap'. Utilitzem l'objecte 'std::cout' dins del bucle per imprimir cada parell clau-valor a la consola. Finalment, la instrucció 'retorn 0' conclou la funció 'principal' que indica l'execució correcta del nostre programa.
La sortida mostra els parells clau-valor restants al 'std::map' després d'esborrar l'element amb la clau 2 ('Blau'), la qual cosa resulta en la sortida '1: Vermell' i '3: Verd'.
Exemple 2: esborrat per iterador
En C++, els iteradors són objectes que faciliten la navegació d'elements dins d'un contenidor, oferint un mitjà per accedir, modificar o eliminar els elements. La funció 'std::map::erase' també es pot utilitzar amb iteradors per eliminar els elements.
Aquí teniu un exemple:
#inclou#inclou
int principal ( ) {
std::mapa < int, std::string > fruitFolder;
fruitFolder [ 1 ] = 'Mango' ;
fruitFolder [ 2 ] = 'Taronja' ;
fruitFolder [ 3 ] = 'Pinya' ;
fruitFolder [ 4 ] = 'Raims' ;
auto it = fruitMap.find ( 2 ) ;
si ( això ! = fruitMap.end ( ) ) {
fruitMap.erase ( això ) ;
}
per ( const auto & parella: fruitMap ) {
std::cout << parell.primer << ': ' << parell.segon << std::endl;
}
tornar 0 ;
}
El codi C++ proporcionat comença declarant un 'std::map' anomenat 'fruitMap' per emmagatzemar els parells clau-valor, associant els nombres enters amb els noms de fruit corresponents. Omplim el mapa amb entrades per a quatre fruites diferents: 'Mango', 'Taronja', 'Pinya' i 'Raims'. Després d'això, utilitzem la funció 'trobar' per obtenir un iterador (it) que apunta a l'element amb el valor clau de 2 dins del 'fruitMap'. Aleshores, comprovem si l'iterador no és igual a 'end()' per assegurar-nos que l'element amb la clau especificada existeix al mapa.
Al bloc condicional, esborram l'element al qual apunta l'iterador 'it' mitjançant la funció 'esborrar'. Finalment, iterem a través dels elements restants al 'fruitMap' modificat mitjançant un bucle 'for'.
La sortida final mostra el contingut modificat 'fruitMap' després de l'esborrat.
Exemple 3: esborrar un rang
El contenidor 'std::map' en C++ proporciona un mètode convenient per esborrar els elements dins d'un interval especificat. La funció 'esborrar' permet eliminar els elements del mapa basant-se en iteradors que representen l'inici i el final de l'interval que s'ha d'esborrar.
Ara, explorem el concepte d'esborrar un rang mitjançant 'std::map' amb un exemple:
#inclou#inclou
int principal ( ) {
std::mapa < int, std::string > nouMapa;
nouMapa [ 1 ] = 'Cavall' ;
nouMapa [ 2 ] = 'Lleó' ;
nouMapa [ 3 ] = 'Tigre' ;
nouMapa [ 4 ] = 'Gat' ;
newMap.erase ( newMap.límit_inferior ( 2 ) , newMap.upper_bound ( 3 ) ) ;
per ( const auto & parella: newMap ) {
std::cout << parell.primer << ': ' << parell.segon << std::endl;
}
tornar 0 ;
}
El programa comença declarant un 'std::map' anomenat 'newMap' que associa les claus senceres amb els valors de cadena corresponents. Després d'això, omplim el mapa amb parells clau-valor mitjançant l'operador de claudàtors. Per exemple, assignem els parells clau-valor de (1, 'Cavall'), (2, 'Lleó'), (3, 'Tigre') i (4, 'Gat') a 'newMap'.
La següent operació significativa consisteix a utilitzar els iteradors per esborrar els elements del mapa. La funció d'esborrar s'utilitza amb els arguments 'newMap.lower_bound(2)' i 'newMap.upper_bound(3)'. Això esborra els elements amb tecles que cauen en el rang (2, 3). En altres paraules, elimina les entrades 'Lleó' i 'Tigre' del mapa. Després d'aquesta operació, el mapa conté només els elements amb les claus 1 i 4, corresponents a 'Cavall' i 'Gat'.
Finalment, utilitzem un bucle 'for' basat en intervals per iterar a través dels elements restants del mapa i imprimir els seus parells clau-valor a la consola.
Com a resultat, la sortida mostra el següent:
Exemple 4: esborrar basat en un predicat
L'esborrat basat en un predicat es refereix a eliminar els elements d'una estructura de dades, com ara un contenidor, en funció d'una condició o criteris especificats. El 'std::map::erase' també es pot utilitzar amb una funció de predicat per eliminar els elements condicionalment. Considerem l'exemple següent:
#inclou#inclou
#inclou
int principal ( ) {
std::mapa < int, std::string > myMap = {
{ 1 , 'gener' } ,
{ 2 , 'febrer' } ,
{ 3 , 'març' } ,
{ 4 , 'abril' } ,
{ 5 , 'Maig' }
} ;
predicat automàtic = [ ] ( const std::pair < int, std::string >& element ) {
tornar element.segon.longitud ( ) < 5 ;
} ;
myMap.erase ( std::remove_if ( myMap.begin ( ) , myMap.end ( ) , predicat ) , myMap.end ( ) ) ;
std::cout << ' \n Mapa després d'esborrar elements basats en el predicat:' << std::endl;
per ( const auto & parella: myMap ) {
std::cout << parell.primer << ': ' << parell.segon << std::endl;
}
tornar 0 ;
}
El programa comença per incloure els fitxers de capçalera necessaris. Un 'std::map' anomenat 'myMap' es declara i s'inicializa a la funció 'main'. Conté els parells clau-valor que representen els noms dels mesos i els seus respectius valors numèrics. Posteriorment, es defineix una funció 'lambda' (predicat). Aquesta funció 'lambda' serveix com a predicat per a l'algorisme 'std::remove_if'. Verifica si la longitud del valor de cadena que s'associa amb un element del mapa és inferior a cinc caràcters.
Aleshores s'utilitza l'algorisme 'std::remove_if' juntament amb la funció 'esborrar' del 'std::map'. Aquesta combinació elimina els elements del mapa en funció de la validesa del predicat.
Després d'executar el programa, els elements amb claus inferiors a cinc s'eliminen del mapa original, demostrant l'esborrat basat en un predicat mitjançant 'std::map'.
Conclusió
En conclusió, la funció 'std::map::erase' és una eina versàtil en C++ per eliminar els elements de 'std::map'. Tant si esborra per clau, iterador, rang o basat en un predicat, la funció 'std::map::erase' proporciona flexibilitat i facilitat d'ús. Dominant aquesta funció, els desenvolupadors de C++ poden gestionar i manipular de manera eficient les dades dins dels contenidors 'std::map', fent que el seu codi sigui més fort i fàcil de mantenir.