C++ Std::Map::Erase Näited

C Std Map Erase Naited



Paljude 'std::map' jaoks saadaolevate toimingute hulgast paistab funktsioon 'kustutus' silma olulise tööriistana elementide eemaldamiseks nende võtmete alusel. 'std::map' on organiseeritud assotsiatiivne konteiner, mis koosneb võtme-väärtuste paaridest. Elementide paigutus 'std::map' sees sorteeritakse järjekindlalt nende võtmete järgi, mis hõlbustab võtmeväärtuste põhjal tõhusaid toiminguid, nagu otsing, sisestamine ja kustutamine.

C++ valdkonnas toimib funktsioon 'std::map::erase' klassi 'std::map' liikmefunktsioonina, võimaldades teatud elemendid kaardilt eemaldada. Seda on erinevates vormides, pakkudes paindlikkust kustutatavate elementide täpsustamisel. Selles artiklis käsitleme 'std::map::erase' üksikasju, pakkudes selle mitmekülgsuse illustreerimiseks mitmeid näiteid.







Näide 1: Kustutamine võtmega

Võimalus kustutada elemente võtmega 'std::map' on C++ standardmalliteegi põhifunktsioon. Seda toimingut kasutatakse tavaliselt siis, kui teil on vaja hallata ja manipuleerida programmi võtme-väärtuste paare ning see pakub mugavat viisi konkreetsete elementide eemaldamiseks nende võtmete alusel. Loome näite, mis näitab, kuidas kasutada kaarti 'std::map' kaardi loomiseks, elemendi kustutamiseks võtmega ja seejärel muudetud kaardi kuvamiseks.



#include
#include

int main ( ) {
std::map < int, std::string > myMap;
myMap [ 1 ] = 'Punane' ;
myMap [ 2 ] = 'Sinine' ;
myMap [ 3 ] = 'Roheline' ;

myMap.erase ( 2 ) ;

jaoks ( const auto & paar: myMap ) {
std::cout << paar.esimene << ':' << paar.teine << std::endl;
}

tagasi 0 ;
}


Selles näites lisame alustuseks vajalikud C++ standardteegid, nagu ja , et võimaldada vastavalt sisend-/väljundoperatsioonide ja konteineri „std::map” kasutamist. Funktsioonis 'main' initsialiseerime 'std::map' nimega 'myMap', kus täisarvu võtmed on seotud vastavate stringi väärtustega. Kaardile lisatakse kolm võtme-väärtuste paari, mis esindavad värve: 'Punane' klahvi 1 jaoks, 'Sinine' klahvi 2 jaoks ja 'Roheline' klahvi 3 jaoks. Seejärel kasutame 'kustuta' liikme funktsiooni. std::map” klassi võtmega 2 seotud elemendi eemaldamiseks meie kaardilt. Järelikult ei ole sinine värv pärast seda toimingut enam kaardi osa.



Tulemuseks oleva kaardi oleku kuvamiseks kasutame tsüklit „for”, mis itereerib läbi iga võtme-väärtuste paari „myMap” sees. Iga võtme-väärtuse paari konsooli printimiseks kasutame tsükli sees olevat objekti 'std::cout'. Lõpuks lõpetab lause 'return 0' funktsiooni 'peamine', mis annab märku meie programmi edukast täitmisest.





Väljund kuvab ülejäänud võtme-väärtuste paarid 'std::map'-s pärast seda, kui võtmega 2 ('sinine') on kustutatud, mille tulemuseks on '1: punane' ja '3: roheline' väljund.



Näide 2: Kustutamine Iteraatori abil

C++ puhul on iteraatorid objektid, mis hõlbustavad elementides navigeerimist konteineris, pakkudes vahendeid elementidele juurde pääsemiseks, nende muutmiseks või eemaldamiseks. Funktsiooni 'std::map::erase' saab elementide eemaldamiseks kasutada ka iteraatoritega.

Siin on näide:

#include
#include

int main ( ) {
std::map < int, std::string > puuviljakaust;
puuviljakaust [ 1 ] = 'Mango' ;
puuviljakaust [ 2 ] = 'oranž' ;
puuviljakaust [ 3 ] = 'PineApple' ;
puuviljakaust [ 4 ] = 'Viinamarjad' ;

auto it = fruitMap.find ( 2 ) ;

kui ( seda ! = puuviljakaart.lõpp ( ) ) {
puuviljakaart.kustuta ( seda ) ;
}

jaoks ( const auto & paar : puuviljakaart ) {
std::cout << paar.esimene << ':' << paar.teine << std::endl;
}

tagasi 0 ;
}


Esitatud C++ kood algab võtme-väärtuste paaride salvestamiseks deklareerides 'std::map' nimega 'fruitMap', seostades täisarvud vastavate puuviljade nimedega. Täidame kaardi nelja erineva puuvilja kirjetega: 'Mango', 'Orange', 'PineApple' ja 'Viinamarjad'. Pärast seda kasutame funktsiooni 'leida', et saada iteraator (see), mis osutab elemendile võtmeväärtusega 2 'fruitMapis'. Seejärel kontrollime, kas iteraator ei ole võrdne 'end()'-ga, et tagada määratud võtmega elemendi olemasolu kaardil.

Tingimuslikus plokis kustutame elemendi, millele viitab iteraator, kasutades funktsiooni 'kustuta'. Lõpuks kordame muudetud 'fruitMapis' ülejäänud elemente, kasutades 'for' tsüklit.

Lõplikus väljundis kuvatakse pärast kustutamist muudetud 'fruitMap' sisu.

Näide 3: Vahemiku kustutamine

Konteiner 'std::map' C++-s pakub mugavat meetodit määratud vahemikus olevate elementide kustutamiseks. Funktsioon 'kustuta' võimaldab teil eemaldada kaardilt elemente iteraatorite põhjal, mis tähistavad kustutatava vahemiku algust ja lõppu.

Nüüd uurime näite abil vahemiku kustutamise kontseptsiooni 'std::map' abil:

#include
#include

int main ( ) {
std::map < int, std::string > uus kaart;
uus kaart [ 1 ] = 'hobune' ;
uus kaart [ 2 ] = 'Lõvi' ;
uus kaart [ 3 ] = 'Tiiger' ;
uus kaart [ 4 ] = 'Kass' ;

uusMap.erase ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;

jaoks ( const auto & paar: uus kaart ) {
std::cout << paar.esimene << ':' << paar.teine << std::endl;
}

tagasi 0 ;
}


Programm alustab deklareerides 'std::map' nimega 'newMap', mis seob täisarvu võtmed vastavate stringi väärtustega. Pärast seda täidame kaardi võtme-väärtuste paaridega, kasutades nurksulgude operaatorit. Näiteks määrame võtme-väärtuste paarid (1, 'hobune'), (2, 'Lion'), (3, 'Tiiger') ja (4, 'Cat') väärtusele 'newMap'.

Järgmine oluline toiming hõlmab iteraatorite kasutamist elementide kustutamiseks kaardilt. Kustutusfunktsiooni kasutatakse argumentidega 'newMap.lower_bound(2)' ja 'newMap.upper_bound(3)'. See kustutab vahemikku (2, 3) kuuluvate klahvidega elemendid. Teisisõnu eemaldab see kaardilt kirjed 'Lõvi' ja 'Tiiger'. Pärast seda toimingut sisaldab kaart ainult klahvidega 1 ja 4 elemente, mis vastavad 'hobune' ja 'kass'.

Lõpuks kasutame vahemikupõhist for-silmust, et itereerida ülejäänud kaardil olevaid elemente ja printida nende võtme-väärtuste paarid konsooli.

Selle tulemusena kuvatakse väljundis järgmine:

Näide 4: Kustutamine predikaadi alusel

Predikaadil põhinev kustutamine viitab elementide eemaldamisele andmestruktuurist (nt konteinerist) määratud tingimuse või kriteeriumide alusel. 'std::map::erase' saab kasutada ka predikaatfunktsiooniga elementide tingimuslikuks eemaldamiseks. Vaatleme järgmist näidet:

#include
#include
#include

int main ( ) {

std::map < int, std::string > myMap = {
{ 1 , 'jaanuar' } ,
{ 2 , 'veebruar' } ,
{ 3 , 'märts' } ,
{ 4 , 'aprill' } ,
{ 5 , 'mai' }
} ;

auto predikaat = [ ] ( const std::pair < int, std::string >& element ) {
tagasi element.teine.pikkus ( ) < 5 ;
} ;

myMap.erase ( std::remove_if ( myMap.begin ( ) , myMap.end ( ) , predikaat ) , myMap.end ( ) ) ;

std::cout << ' \n Kaart pärast elementide kustutamist predikaadi alusel:' << std::endl;
jaoks ( const auto & paar: myMap ) {
std::cout << paar.esimene << ':' << paar.teine << std::endl;
}

tagasi 0 ;
}


Programm algab vajalike päisefailide lisamisega. 'std::map' nimega 'myMap' deklareeritakse ja lähtestatakse funktsioonis 'peamine'. See sisaldab võtme-väärtuste paare, mis esindavad kuude nimesid ja nende vastavaid arvväärtusi. Seejärel määratletakse lambda-funktsioon (predikaat). See 'lambda' funktsioon toimib 'std::remove_if' algoritmi predikaadina. See kontrollib, kas kaardielemendiga seotud stringiväärtuse pikkus on alla viie tähemärgi.

Algoritmi 'std::remove_if' kasutatakse seejärel koos 'std::map' funktsiooniga 'kustuta'. See kombinatsioon eemaldab elemendid kaardilt predikaadi kehtivuse alusel.

Pärast programmi käivitamist eemaldatakse algselt kaardilt elemendid, mille võtmed on alla viie, näidates kustutamist predikaadi alusel, kasutades “std::map”.

Järeldus

Kokkuvõtteks võib öelda, et funktsioon 'std::map::erase' on C++-s mitmekülgne tööriist std::mapi elementide eemaldamiseks. Olenemata sellest, kas kustutamine toimub võtme, iteraatori, vahemiku või predikaadi alusel, pakub funktsioon 'std::map::erase' paindlikkust ja kasutuslihtsust. Selle funktsiooni valdamisega saavad C++ arendajad tõhusalt hallata ja manipuleerida std::map konteinerites olevaid andmeid, muutes nende koodi tugevamaks ja hõlpsamini hooldatavaks.