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
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.