Mezi mnoha operacemi dostupnými pro „std::map“ vyniká funkce „erase“ jako zásadní nástroj pro odstranění prvků na základě jejich klíčů. „Std::map“ je organizovaný asociativní kontejner, který se skládá z párů klíč–hodnota. Uspořádání prvků v rámci „std::map“ je konzistentně seřazeno podle jejich klíčů, což usnadňuje efektivní operace, jako je vyhledávání, vkládání a mazání na základě hodnot klíčů.
V oblasti C++ slouží funkce „std::map::erase“ jako členská funkce třídy „std::map“, která umožňuje eliminaci konkrétních prvků z mapy. Dodává se v různých formách a poskytuje flexibilitu při určování, které prvky se mají vymazat. V tomto článku se ponoříme do podrobností „std::map::erase“ a poskytneme několik příkladů pro ilustraci jeho všestrannosti.
Příklad 1: Mazání pomocí klíče
Schopnost vymazat prvky klíčem v „std::map“ je základní funkcí, kterou poskytuje C++ Standard Template Library. Tato operace se běžně používá, když potřebujete spravovat a manipulovat s páry klíč-hodnota v programu, a poskytuje pohodlný způsob odstranění konkrétních prvků na základě jejich klíčů. Vytvoříme příklad, který demonstruje, jak použít „std::map“ k vytvoření mapy, vymazání prvku pomocí klíče a poté zobrazení upravené mapy.
#include
#include
int main ( ) {
std::map < int, std::string > moje mapa;
moje mapa [ 1 ] = 'Červené' ;
moje mapa [ 2 ] = 'Modrý' ;
moje mapa [ 3 ] = 'Zelená' ;
myMap.erase ( 2 ) ;
pro ( const auto & pár: moje mapa ) {
std::cout << pár.první << ':' << pár.druhý << std::endl;
}
vrátit se 0 ;
}
V tomto příkladu začneme zahrnutím nezbytných standardních knihoven C++, jako jsou
Abychom předvedli výsledný stav mapy, používáme smyčku „for“, která prochází každým párem klíč–hodnota v rámci „myMap“. K vytištění každého páru klíč-hodnota do konzole používáme objekt „std::cout“ uvnitř smyčky. Nakonec příkaz „return 0“ uzavírá funkci „hlavní“, která signalizuje úspěšné provedení našeho programu.
Výstup zobrazí zbývající páry klíč–hodnota v „std::map“ po vymazání prvku s klíčem 2 („Modrá“), což vede k výstupu „1: Červená“ a „3: Zelená“.
Příklad 2: Mazání iterátorem
V C++ jsou iterátory objekty, které usnadňují navigaci prvků v kontejneru a nabízejí prostředky pro přístup, úpravu nebo odstranění prvků. Funkci „std::map::erase“ lze také použít s iterátory k odstranění prvků.
Zde je příklad:
#include#include
int main ( ) {
std::map < int, std::string > fruitFolder;
fruitFolder [ 1 ] = 'Mango' ;
fruitFolder [ 2 ] = 'Oranžový' ;
fruitFolder [ 3 ] = 'Ananas' ;
fruitFolder [ 4 ] = 'Hrozny' ;
auto it = fruitMap.find ( 2 ) ;
-li ( to ! = fruitMap.end ( ) ) {
fruitMap.erase ( to ) ;
}
pro ( const auto & pár : fruitMap ) {
std::cout << pár.první << ': ' << pár.druhý << std::endl;
}
vrátit se 0 ;
}
Poskytnutý kód C++ začíná deklarováním „std::map“ s názvem „fruitMap“ pro uložení párů klíč-hodnota, přiřazování celých čísel k odpovídajícím názvům ovoce. Mapu vyplníme záznamy pro čtyři různé druhy ovoce: „Mango“, „Pomeranč“, „PineApple“ a „Hrozny“. Poté pomocí funkce „najít“ získáme iterátor (to), který ukazuje na prvek s hodnotou klíče 2 v rámci „fruitMap“. Poté zkontrolujeme, zda se iterátor nerovná „end()“, abychom zajistili, že prvek se zadaným klíčem v mapě existuje.
V podmíněném bloku vymažeme prvek, na který ukazuje iterátor „it“ pomocí funkce „erase“. Nakonec iterujeme zbývající prvky v upravené „fruitMap“ pomocí smyčky „for“.
Konečný výstup zobrazuje upravený obsah „fruitMap“ po vymazání.
Příklad 3: Vymazání rozsahu
Kontejner „std::map“ v C++ poskytuje pohodlnou metodu pro vymazání prvků v určeném rozsahu. Funkce „erase“ umožňuje odstranit prvky z mapy na základě iterátorů, které představují začátek a konec rozsahu, který má být vymazán.
Nyní se podívejme na koncept mazání rozsahu pomocí „std::map“ na příkladu:
#include#include
int main ( ) {
std::map < int, std::string > nová mapa;
nová mapa [ 1 ] = 'Kůň' ;
nová mapa [ 2 ] = 'Lev' ;
nová mapa [ 3 ] = 'Tygr' ;
nová mapa [ 4 ] = 'Kočka' ;
newMap.erase ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;
pro ( const auto & pár: nová mapa ) {
std::cout << pár.první << ': ' << pár.druhý << std::endl;
}
vrátit se 0 ;
}
Program začíná deklarací „std::map“ s názvem „newMap“, která spojuje celočíselné klíče s odpovídajícími řetězcovými hodnotami. Poté mapu naplníme páry klíč–hodnota pomocí operátoru hranatých závorek. Například páry klíč–hodnota (1, „Kůň“), (2, „Lev“), (3, „Tiger“) a (4, „Kočka“) přiřadíme k „nové mapě“.
Další významná operace zahrnuje použití iterátorů k vymazání prvků z mapy. Funkce erase se používá s argumenty „newMap.lower_bound(2)“ a „newMap.upper_bound(3)“. Tím se vymažou prvky s klávesami, které spadají do rozsahu (2, 3). Jinými slovy, odstraní z mapy položky „Lion“ a „Tiger“. Po této operaci mapa obsahuje pouze prvky s klávesami 1 a 4, které odpovídají „Kůň“ a „Kočka“.
Nakonec použijeme rozsahově založenou smyčku „for“ k iteraci zbývajících prvků v mapě a vytištění jejich párů klíč–hodnota do konzole.
Výsledkem je, že výstup zobrazuje následující:
Příklad 4: Mazání na základě predikátu
Vymazání na základě predikátu se týká odstranění prvků z datové struktury, jako je kontejner, na základě zadané podmínky nebo kritérií. „Std::map::erase“ lze také použít s predikátovou funkcí k podmíněnému odstranění prvků. Podívejme se na následující příklad:
#include#include
#include
int main ( ) {
std::map < int, std::string > moje mapa = {
{ 1 , 'Leden' } ,
{ 2 , 'Únor' } ,
{ 3 , 'Březen' } ,
{ 4 , 'Duben' } ,
{ 5 , 'Smět' }
} ;
automatický predikát = [ ] ( const std::pair < int, std::string >& živel ) {
vrátit se prvek.druhá.délka ( ) < 5 ;
} ;
myMap.erase ( std::remove_if ( myMap.begin ( ) , myMap.end ( ) , predikát ) , myMap.end ( ) ) ;
std::cout << ' \n Mapa po vymazání prvků na základě predikátu:' << std::endl;
pro ( const auto & pár: moje mapa ) {
std::cout << pár.první << ': ' << pár.druhý << std::endl;
}
vrátit se 0 ;
}
Program začíná zahrnutím nezbytných hlavičkových souborů. „Std::map“ s názvem „myMap“ je deklarován a inicializován ve funkci „main“. Obsahuje páry klíč–hodnota, které představují názvy měsíců a jejich příslušné číselné hodnoty. Následně je definována „lambda“ funkce (predikát). Tato funkce „lambda“ slouží jako predikát pro algoritmus „std::remove_if“. Ověřuje, zda délka hodnoty řetězce, která je přidružena k prvku mapy, je menší než pět znaků.
Algoritmus „std::remove_if“ je pak použit ve spojení s funkcí „erase“ funkce „std::map“. Tato kombinace odstraní prvky z mapy na základě platnosti predikátu.
Po spuštění programu jsou prvky s klíči menšími než pět odstraněny z původní mapy, což demonstruje vymazání na základě predikátu pomocí „std::map“.
Závěr
Závěrem lze říci, že funkce „std::map::erase“ je všestranný nástroj v C++ k odstranění prvků ze „std::map“. Ať už mažete pomocí klíče, iterátoru, rozsahu nebo na základě predikátu, funkce „std::map::erase“ poskytuje flexibilitu a snadné použití. Zvládnutím této funkce mohou vývojáři C++ efektivně spravovat a manipulovat s daty v kontejnerech „std::map“, čímž je jejich kód silnější a snadněji udržovatelný.