Monista 'std::map' -toiminnolle käytettävissä olevista toiminnoista 'erase'-toiminto erottuu tärkeänä työkaluna elementtien poistamiseen niiden avainten perusteella. 'std::map' on järjestetty assosiatiivinen säilö, joka koostuu avain-arvo-pareista. Elementtien järjestely 'std::map':ssa on johdonmukaisesti lajiteltu avaimien mukaan, mikä helpottaa tehokkaita toimintoja, kuten hakua, lisäämistä ja poistamista avainarvojen perusteella.
C++:n sisällä 'std::map::erase'-funktio toimii 'std::map'-luokan jäsenfunktiona, mikä mahdollistaa tiettyjen elementtien poistamisen kartalta. Sitä on eri muodoissa, mikä tarjoaa joustavuutta määritettäessä, mitkä elementit poistetaan. Tässä artikkelissa perehdymme 'std::map::erase' -sovelluksen yksityiskohtiin tarjoamalla useita esimerkkejä havainnollistamaan sen monipuolisuutta.
Esimerkki 1: Poistaminen avaimella
Mahdollisuus poistaa elementit avaimella 'std::map' on C++ Standard Template Libraryn perusominaisuus. Tätä toimintoa käytetään yleisesti, kun haluat hallita ja käsitellä ohjelman avain-arvo-pareja, ja se tarjoaa kätevän tavan poistaa tietyt elementit niiden avaimien perusteella. Luomme esimerkin havainnollistamaan, kuinka 'std::map':lla luodaan kartta, poistetaan elementti avaimella ja näytetään sitten muokattu kartta.
#include
#sisällytä
int main ( ) {
std::map < int, std::string > myMap;
myMap [ 1 ] = 'Punainen' ;
myMap [ 2 ] = 'Sininen' ;
myMap [ 3 ] = 'Vihreä' ;
myMap.erase ( 2 ) ;
varten ( const auto & pari : myMap ) {
std::cout << pari.ensin << ':' << pari.sekunti << std::endl;
}
palata 0 ;
}
Tässä esimerkissä aloitamme sisällyttämällä tarvittavat C++-standardikirjastot, kuten
Kartan tuloksena olevan tilan esittelemiseksi käytämme 'for'-silmukkaa, joka toistuu jokaisen avainarvoparin läpi 'myMapissa'. Käytämme 'std::cout' -objektia silmukan sisällä tulostaaksemme jokaisen avainarvoparin konsoliin. Lopuksi 'return 0' -lause päättää 'main'-funktion, joka ilmaisee ohjelmamme onnistuneen suorittamisen.
Tulos näyttää jäljellä olevat avainarvoparit 'std::map' -kentässä sen jälkeen, kun elementti avaimella 2 ('Blue') on poistettu, jolloin tuloksena on '1: Red' ja '3: Green'.
Esimerkki 2: Iteratorin poistaminen
C++:ssa iteraattorit ovat objekteja, jotka helpottavat elementtien navigointia säilön sisällä ja tarjoavat keinon käyttää, muokata tai poistaa elementtejä. 'std::map::erase'-funktiota voidaan käyttää myös iteraattorien kanssa elementtien poistamiseen.
Tässä on esimerkki:
#include#sisällytä
int main ( ) {
std::map < int, std::string > hedelmä kansio;
hedelmäkansio [ 1 ] = 'Mango' ;
hedelmäkansio [ 2 ] = 'Oranssi' ;
hedelmäkansio [ 3 ] = 'Ananas' ;
hedelmäkansio [ 4 ] = 'rypäleet' ;
auto it = hedelmäMap.find ( 2 ) ;
jos ( se ! = hedelmäMap.end ( ) ) {
fruitMap.erase ( se ) ;
}
varten ( const auto & pari: hedelmäkartta ) {
std::cout << pari.ensin << ':' << pari.sekunti << std::endl;
}
palata 0 ;
}
Annettu C++-koodi alkaa ilmoittamalla 'std::map' nimeltä 'fruitMap', joka tallentaa avainarvoparit ja yhdistää kokonaisluvut vastaaviin hedelmien nimiin. Täytämme kartan neljän eri hedelmän merkinnöillä: 'Mango', 'Orange', 'PineApple' ja 'Rypäleet'. Tämän jälkeen käytämme 'etsi'-funktiota saadaksemme iteraattorin (se), joka osoittaa elementtiin, jonka avainarvo on 2 'fruitMap' -sovelluksessa. Sitten tarkistamme, ettei iteraattori ole sama kuin 'end()' varmistaaksemme, että määritetyllä avaimella varustettu elementti on olemassa kartassa.
Ehdollisessa lohkossa poistamme elementin, johon iteraattori osoittaa 'erase'-toiminnolla. Lopuksi toistamme muokatun 'fruitMapin' jäljellä olevat elementit 'for' -silmukan avulla.
Lopullinen tulos näyttää muokatun 'fruitMap'-sisällön poistamisen jälkeen.
Esimerkki 3: Alueen poistaminen
C++:n 'std::map'-säilö tarjoaa kätevän tavan poistaa tietyn alueen elementit. 'Poista'-toiminnolla voit poistaa kartalta elementtejä poistettavan alueen alkua ja loppua edustavien iteraattorien perusteella.
Tarkastellaan nyt esimerkin avulla alueen poistamista 'std::map':n avulla:
#include#sisällytä
int main ( ) {
std::map < int, std::string > uusi kartta;
uusi kartta [ 1 ] = 'Hevonen' ;
uusi kartta [ 2 ] = 'Leijona' ;
uusi kartta [ 3 ] = 'Tiikeri' ;
uusi kartta [ 4 ] = 'Kissa' ;
newMap.erase ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;
varten ( const auto & pari : uusi kartta ) {
std::cout << pari.ensin << ':' << pari.sekunti << std::endl;
}
palata 0 ;
}
Ohjelma alkaa ilmoittamalla 'std::map' nimeltä 'newMap', joka yhdistää kokonaislukuavaimet vastaaviin merkkijonoarvoihin. Tämän jälkeen täytämme kartan avainarvo-pareilla käyttämällä hakasulkeoperaattoria. Määritämme esimerkiksi avainarvoparit (1, “hevonen”), (2, “leijona”), (3, “tiikeri”) ja (4, “kissa”) kohtaan “newMap”.
Seuraava merkittävä toimenpide on iteraattorien käyttäminen elementtien poistamiseen kartalta. Poistotoimintoa käytetään 'newMap.lower_bound(2)'- ja 'newMap.upper_bound(3)'-argumenttien kanssa. Tämä poistaa elementit näppäimillä, jotka kuuluvat alueelle (2, 3). Toisin sanoen se poistaa kartalta merkinnät 'Leijona' ja 'Tiikeri'. Tämän toimenpiteen jälkeen kartta sisältää vain elementit näppäimillä 1 ja 4, jotka vastaavat 'Hevonen' ja 'Kissa'.
Lopuksi käytämme aluepohjaista 'for'-silmukkaa iteroidaksemme kartan jäljellä olevat elementit ja tulostaa niiden avainarvoparit konsoliin.
Tämän seurauksena tulos näyttää seuraavan:
Esimerkki 4: Poistaminen predikaatin perusteella
Predikaattiin perustuva poistaminen tarkoittaa elementtien poistamista tietorakenteesta, kuten säilöstä, tietyn ehdon tai kriteerien perusteella. 'std::map::erase' voidaan käyttää myös predikaattifunktion kanssa elementtien poistamiseksi ehdollisesti. Tarkastellaanpa seuraavaa esimerkkiä:
#include#sisällytä
#include
int main ( ) {
std::map < int, std::string > myMap = {
{ 1 , 'Tammikuu' } ,
{ 2 , 'Helmikuu' } ,
{ 3 , 'maaliskuu' } ,
{ 4 , 'Huhtikuu' } ,
{ 5 , 'Saattaa' }
} ;
automaattinen predikaatti = [ ] ( const std::pair < int, std::string >& elementti ) {
palata elementti.sekunti.pituus ( ) < 5 ;
} ;
myMap.erase ( std::remove_if ( myMap.begin ( ) , myMap.end ( ) , predikaatti ) , myMap.end ( ) ) ;
std::cout << ' \n Kartta elementtien poistamisen jälkeen predikaatin perusteella:' << std::endl;
varten ( const auto & pari : myMap ) {
std::cout << pari.ensin << ':' << pari.sekunti << std::endl;
}
palata 0 ;
}
Ohjelma alkaa lisäämällä tarvittavat otsikkotiedostot. 'std::map' nimeltä 'myMap' ilmoitetaan ja alustetaan 'main'-funktiossa. Se sisältää avainarvoparit, jotka edustavat kuukausien nimiä ja niitä vastaavia numeerisia arvoja. Tämän jälkeen määritellään 'lambda'-funktio (predikaatti). Tämä 'lambda'-funktio toimii predikaattina 'std::remove_if'-algoritmille. Se tarkistaa, onko karttaelementtiin liittyvän merkkijonon arvon pituus alle viisi merkkiä.
'std::remove_if'-algoritmia käytetään sitten yhdessä 'std::map'-funktion 'erase' kanssa. Tämä yhdistelmä poistaa elementit kartalta predikaatin pätevyyden perusteella.
Ohjelman suorittamisen jälkeen alkiot, joiden avaimet ovat alle viisi, poistetaan alkuperäisestä kartasta, mikä osoittaa poiston predikaatin perusteella käyttämällä 'std::map'.
Johtopäätös
Yhteenvetona voidaan todeta, että 'std::map::erase'-toiminto on monipuolinen työkalu C++:ssa elementtien poistamiseen 'std::mapista'. 'std::map::erase'-toiminto tarjoaa joustavuutta ja helppokäyttöisyyttä riippumatta siitä, poistetaanko se avaimella, iteraattorilla, alueella tai predikaatin perusteella. Hallitsemalla tämän toiminnon C++-kehittäjät voivat tehokkaasti hallita ja käsitellä 'std::map'-säilöissä olevia tietoja tehden koodistaan vahvemman ja helpompia ylläpitää.