C++ Std::Map::Erase Primjeri

C Std Map Erase Primjeri



Među mnogim operacijama dostupnim za 'std::map', funkcija 'brisanje' ističe se kao ključni alat za uklanjanje elemenata na temelju njihovih ključeva. 'std::map' je organizirani asocijativni spremnik koji se sastoji od parova ključ-vrijednost. Raspored elemenata unutar 'std::map' dosljedno je sortiran prema njihovim ključevima, olakšavajući učinkovite operacije kao što su pretraživanje, umetanje i brisanje na temelju vrijednosti ključa.

U području C++, funkcija 'std::map::erase' služi kao funkcija član klase 'std::map', omogućujući eliminaciju određenih elemenata iz karte. Dolazi u različitim oblicima, pružajući fleksibilnost u određivanju elemenata za brisanje. U ovom ćemo članku istražiti pojedinosti 'std::map::erase', pružajući više primjera koji ilustriraju njegovu svestranost.







Primjer 1: Brisanje tipkom

Mogućnost brisanja elemenata pomoću ključa u 'std::map' temeljna je značajka koju pruža C++ Standard Template Library. Ova se operacija obično koristi kada trebate upravljati i manipulirati parovima ključ-vrijednost u programu, a pruža prikladan način za uklanjanje određenih elemenata na temelju njihovih ključeva. Napravit ćemo primjer da pokažemo kako koristiti 'std::map' za stvaranje mape, brisanje elementa pomoću ključa, a zatim prikazati modificiranu kartu.



#include
#include

int glavni ( ) {
std::map < int, std::string > moja karta;
moja karta [ 1 ] = 'Crvena' ;
moja karta [ 2 ] = 'plava' ;
moja karta [ 3 ] = 'zeleno' ;

myMap.brisanje ( 2 ) ;

za ( const auto i par : myMap ) {
std::cout << par.prvi << ':' << par.drugi << std::endl;
}

povratak 0 ;
}


U ovom primjeru počinjemo uključivanjem potrebnih C++ standardnih biblioteka kao što su i kako bismo omogućili korištenje ulazno/izlaznih operacija odnosno spremnika 'std::map'. Unutar funkcije 'main', inicijaliziramo 'std::map' pod nazivom 'myMap' gdje su ključevi cijelog broja povezani s odgovarajućim vrijednostima niza. Karti se dodaju tri para ključ-vrijednost koji predstavljaju boje: 'crveno' za ključ 1, 'plavo' za ključ 2 i 'zeleno' za ključ 3. Zatim koristimo funkciju člana 'brisanje' std::map” za uklanjanje elementa povezanog s ključem 2 s naše mape. Posljedično, 'Plava' boja više nije dio karte nakon ove operacije.



Kako bismo prikazali rezultirajuće stanje karte, koristimo petlju 'za' koja ponavlja svaki par ključ-vrijednost unutar 'myMap'. Koristimo objekt 'std::cout' unutar petlje za ispis svakog para ključ-vrijednost na konzoli. Na kraju, naredba 'return 0' zaključuje 'main' funkciju koja signalizira uspješno izvođenje našeg programa.





Izlaz prikazuje preostale parove ključ-vrijednost u 'std::map' nakon što je element s ključem 2 ('Blue') izbrisan, što rezultira izlazom '1: Red' i '3: Green'.



Primjer 2: Brisanje iteratorom

U C++-u, iteratori su objekti koji olakšavaju navigaciju elementima unutar spremnika, nudeći sredstva za pristup, modificiranje ili uklanjanje elemenata. Funkcija 'std::map::erase' također se može koristiti s iteratorima za uklanjanje elemenata.

Evo primjera:

#include
#include

int glavni ( ) {
std::map < int, std::string > fruitFolder;
fruitFolder [ 1 ] = 'Mango' ;
fruitFolder [ 2 ] = 'Naranča' ;
fruitFolder [ 3 ] = 'Ananas' ;
fruitFolder [ 4 ] = 'Grožđe' ;

auto it = fruitMap.find ( 2 ) ;

ako ( to ! = fruitMap.end ( ) ) {
fruitMap.brisanje ( to ) ;
}

za ( const auto i par : fruitMap ) {
std::cout << par.prvi << ':' << par.drugi << std::endl;
}

povratak 0 ;
}


Navedeni C++ kod počinje deklariranjem 'std::map' pod nazivom 'fruitMap' za pohranjivanje parova ključ-vrijednost, povezujući cijele brojeve s odgovarajućim nazivima voća. Kartu popunjavamo unosima za četiri različita voća: 'Mango', 'Naranča', 'Ananas' i 'Grožđe'. Nakon toga, koristimo funkciju 'find' da bismo dobili iterator (it) koji pokazuje na element s ključnom vrijednošću 2 unutar 'fruitMap'. Zatim provjeravamo nije li iterator jednak 'end()' kako bismo osigurali da element s navedenim ključem postoji u mapi.

U uvjetnom bloku brišemo element na koji pokazuje 'it' iterator pomoću funkcije 'erase'. Na kraju, ponavljamo kroz preostale elemente u modificiranoj 'fruitMap' koristeći petlju 'for'.

Konačni izlaz prikazuje modificirani sadržaj 'fruitMap' nakon brisanja.

Primjer 3: Brisanje raspona

Kontejner “std::map” u C++ pruža praktičnu metodu za brisanje elemenata unutar određenog raspona. Funkcija 'brisanje' omogućuje vam uklanjanje elemenata s karte na temelju iteratora koji predstavljaju početak i kraj raspona koji se briše.

Sada istražimo koncept brisanja raspona pomoću 'std::map' na primjeru:

#include
#include

int glavni ( ) {
std::map < int, std::string > novaMapa;
novaMapa [ 1 ] = 'Konj' ;
novaMapa [ 2 ] = 'Lav' ;
novaMapa [ 3 ] = 'Tigar' ;
novaMapa [ 4 ] = 'Mačka' ;

newMap.brisanje ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;

za ( const auto i par : nova karta ) {
std::cout << par.prvi << ':' << par.drugi << std::endl;
}

povratak 0 ;
}


Program počinje deklariranjem 'std::map' pod nazivom 'newMap' koji pridružuje cjelobrojne ključeve s odgovarajućim vrijednostima niza. Nakon toga popunjavamo kartu parovima ključ-vrijednost pomoću operatora uglatih zagrada. Na primjer, parove ključ-vrijednost (1, 'Konj'), (2, 'Lav'), (3, 'Tigar') i (4, 'Mačka') dodjeljujemo 'newMap'.

Sljedeća značajna operacija uključuje korištenje iteratora za brisanje elemenata s karte. Funkcija brisanja koristi se s argumentima “newMap.lower_bound(2)” i “newMap.upper_bound(3)”. Time se brišu elementi s ključevima koji spadaju u raspon (2, 3). Drugim riječima, uklanja unose 'Lav' i 'Tigar' s karte. Nakon ove operacije, karta sadrži samo elemente s tipkama 1 i 4, koji odgovaraju “Konju” i “Mački”.

Konačno, koristimo petlju 'za' temeljenu na rasponu za ponavljanje preostalih elemenata u mapi i ispis njihovih parova ključ-vrijednost na konzoli.

Kao rezultat toga, izlaz prikazuje sljedeće:

Primjer 4: Brisanje na temelju predikata

Brisanje na temelju predikata odnosi se na uklanjanje elemenata iz strukture podataka, kao što je spremnik, na temelju određenog uvjeta ili kriterija. 'std::map::erase' također se može koristiti s predikatnom funkcijom za uvjetno uklanjanje elemenata. Razmotrimo sljedeći primjer:

#include
#include
#include

int glavni ( ) {

std::map < int, std::string > moja karta = {
{ 1 , 'siječanj' } ,
{ 2 , 'Veljača' } ,
{ 3 , 'Ožujak' } ,
{ 4 , 'Travanj' } ,
{ 5 , 'Svibanj' }
} ;

autopredikat = [ ] ( const std::par < int, std::string >& element ) {
povratak element.drugi.duljina ( ) < 5 ;
} ;

myMap.brisanje ( std::ukloni_ako ( myMap.begin ( ) , myMap.end ( ) , predikat ) , myMap.end ( ) ) ;

std::cout << ' \n Karta nakon brisanja elemenata na temelju predikata:' << std::endl;
za ( const auto i par : myMap ) {
std::cout << par.prvi << ':' << par.drugi << std::endl;
}

povratak 0 ;
}


Program počinje uključivanjem potrebnih datoteka zaglavlja. “std::map” pod nazivom “myMap” je deklariran i inicijaliziran u “main” funkciji. Sadrži parove ključ-vrijednost koji predstavljaju nazive mjeseci i njihove numeričke vrijednosti. Nakon toga se definira 'lambda' funkcija (predikat). Ova 'lambda' funkcija služi kao predikat za 'std::remove_if' algoritam. Provjerava je li duljina vrijednosti niza koja je pridružena elementu karte manja od pet znakova.

Algoritam 'std::remove_if' tada se koristi u kombinaciji s funkcijom 'brisanje' 'std::map'. Ova kombinacija uklanja elemente s karte na temelju valjanosti predikata.

Nakon pokretanja programa, elementi s ključevima manjim od pet uklanjaju se iz originalne mape, demonstrirajući brisanje na temelju predikata pomoću 'std::map'.

Zaključak

U zaključku, funkcija 'std::map::erase' svestran je alat u C++ za uklanjanje elemenata iz 'std::map'. Bez obzira radi li se o brisanju ključem, iteratorom, rasponom ili na temelju predikata, funkcija 'std::map::erase' pruža fleksibilnost i jednostavnost korištenja. Savladavanjem ove funkcije, C++ programeri mogu učinkovito upravljati i manipulirati podacima unutar 'std::map' spremnika, čineći njihov kod jačim i lakšim za održavanje.