Forstå Unordered_Map::Find()
Funksjonen unordered_map::find() er designet for å finne et element som er assosiert med en spesifisert nøkkel i et 'unordered_map'. Dens erklæring varierer basert på om objektet er konstant-kvalifisert eller ikke, noe som gir fleksibilitet i bruken.
iterator finne ( konst nøkkeltype & k ) ;Dette brukes når 'unordered_map' ikke er konstant-kvalifisert. Denne koden returnerer en iterator som peker til elementet som ble funnet.
const_iterator finn ( konst nøkkeltype & k ) konst ;
Denne versjonen gjelder når 'unordered_map' er konstant-kvalifisert. Den returnerer en konstant iterator med en lignende oppførsel som den ikke-konstante versjonen.
Parametere:
Det krever en enkelt parameter, 'k', som er nøkkelen som skal søkes i 'unordered_map'.
Returverdi:
Returverdien avhenger av kvalifikasjonen til 'unordered_map'-objektet.
Metoden returnerer en ikke-konstant iterator hvis objektet ikke er konstant kvalifisert.
Hvis objektet er konstantkvalifisert, returnerer metoden en konstant iterator.
Tidskompleksitet:
Tidskompleksiteten til std::unordered_map::find() er avgjørende for å forstå effektiviteten:
I gjennomsnittstilfellet er tidskompleksiteten konstant (O(1)), noe som gjør den svært effektiv for typiske brukstilfeller.
I verste fall blir tidskompleksiteten lineær (O(n)). Dette scenariet er imidlertid sjeldent i praksis.
Eksempel 1:
La oss utforske et praktisk eksempel for å illustrere bruken og fordelene med unordered_map::find(). I dette eksemplet opprettes et 'uordnet_kart' med tegnene som nøkler og de tilsvarende heltallene som verdier. Finn()-funksjonen finner elementet som er knyttet til nøkkelen til 'p'. Iteratoren 'ittr' er koblet til elementet som ble funnet, og dataene skrives ut til konsollen. Se følgende kode:
#include#include
bruker navneområde std ;
int hoved- ( tomrom ) {
uordnet_kart < røye , int > unomp = {
{ 'I' , 9 } ,
{ 'en' , 6 } ,
{ 'p' , 8 } ,
{ 'm' , 3 } ,
{ 's' , 4 } } ;
auto ittr = unomp. finne ( 'p' ) ;
cout << 'Iterator' ' << ittr->først << ' ' peker på = ' << ittr -> sekund << endl ;
komme tilbake 0 ; }
La oss dele opp koden for å få en klar og bedre forståelse av den:
#include#include
De nødvendige overskriftsfilene er inkludert:
'std'-navneområdet forenkler koden. Den lar deg bruke elementene fra standard C++-biblioteket uten å prefiksere dem med 'std::'.
uordnet_kart < røye , int > unomp = { { 'I' , 9 } , { 'en' , 6 } , { 'p' , 8 } , { 'm' , 3 } , { 's' , 4 } } ;Et 'unordered_map' kalt 'um' lages med tegnene ('w', 'a', 'p', 'm', 's') som nøkler og de tilsvarende heltallene (9, 6, 8, 3, 4 ) som verdier.
auto ittr = unomp. finne ( 'p' ) ;Finn()-funksjonen brukes til å søke etter elementet med nøkkelen til 'p' i 'unordered_map' som er 'unomp'. Iteratoren 'ittr' peker på det identifiserte elementet.
cout << 'Iterator' ' << ittr->først << ' ' peker på = ' << ittr -> sekund << endl ;Innholdet som er pekt på av iteratoren skrives ut til konsollen. Den skriver ut nøkkelen (“p”) og den tilhørende verdien (8) i dette tilfellet.
komme tilbake 0 ;Programmet avsluttes, og returnerer 0 for å indikere vellykket utførelse.
Utdataene til koden er gitt i følgende for din referanse:
Denne koden er et enkelt eksempel på bruk av unordered_map::find() for å effektivt søke etter og få tilgang til elementene i et 'unordered_map'. Iteratoren gir en praktisk måte å få tilgang til både nøkkelen og den tilhørende verdien til det funnet elementet.
Eksempel 2:
Her er et annet enkelt eksempel på unordered_map::find()-funksjonen. Denne koden demonstrerer bruken av 'unordered_map' for å lagre de boolske verdiene knyttet til heltallsnøkler, og bruker deretter funn()-funksjonen for å sjekke om det finnes spesifikke nøkler. La oss se følgende kode og deretter forstå hvordan den fungerer:
#includebruker navneområde std ;
int hoved- ( ) {
uordnet_kart < int , bool > unomp ;
unomp [ 2 ] = ekte ;
unomp [ 67 ] = falsk ;
unomp [ Fire fem ] = ekte ;
unomp [ 98 ] = falsk ;
hvis ( unomp. finne ( 67 ) == unomp. slutt ( ) )
cout << 'Element ikke funnet' << endl ;
ellers
cout << 'Element funnet' << endl ;
hvis ( unomp. finne ( 42 ) == unomp. slutt ( ) )
cout << 'Element ikke funnet' << endl ;
ellers
cout << 'Element funnet' << endl ;
komme tilbake 0 ;
}
Her er en detaljert beskrivelse av koden:
#includeDenne linjen inkluderer en overskriftsfil som dekker de mest standard C++-bibliotekene som ofte brukes i konkurrerende programmering. I en vanlig C++-utvikling anbefales det imidlertid å inkludere de spesifikke overskriftene.
uordnet_kart < int , bool > unomp ;Et 'unordered_map' kalt 'unomp' opprettes med heltallsnøkler og boolske verdier.
unomp [ 2 ] = ekte ;unomp [ 67 ] = falsk ;
unomp [ Fire fem ] = ekte ;
unomp [ 98 ] = falsk ;
Nøkkel-verdi-parene settes inn i 'uordnet_kartet'. Hver nøkkel (heltall) er assosiert med en boolsk verdi.
hvis ( unomp. finne ( 67 ) == unomp. slutt ( ) )cout << 'Element ikke funnet' << endl ;
ellers
cout << 'Element funnet' << endl ;
Finn()-funksjonen brukes i if-else-betingelsen for å søke etter spesifikke nøkler (67 og 42) i 'unordered_map'. Hvis nøkkelen blir funnet, skrives 'Element funnet' ut. Ellers skrives 'Element ikke funnet' ut. Se følgende utgang:
Denne koden viser den grunnleggende bruken av 'unordered_map' og funn()-funksjonen for å bestemme tilstedeværelsen eller fraværet av spesifikke nøkler i kartet.
Eksempel 3:
La oss utforske et annet eksempel som demonstrerer funnet av en verdi ved å gi et input under kjøring. Dette enkle programmet bruker et 'unordered_map' for å lagre navnene (som nøkler) og tilhørende numeriske verdier (i dette tilfellet representerer noen attributter). Den ber deretter brukeren om å skrive inn et navn, søke etter det navnet på kartet ved å bruke fun()-funksjonen og skrive ut den tilknyttede verdien hvis navnet blir funnet. Koden er gitt i følgende for din referanse:
#include#inkluder
#include
bruker navneområde std ;
int hoved- ( ) {
std :: uordnet_kart < std :: streng , dobbelt > unomp = {
{ 'Herry' , 23 } ,
{ 'Andre' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
streng hvem ;
cout << 'Hvem ser du etter? ' ;
getline ( spiser , WHO ) ;
uordnet_kart < streng , dobbelt >:: const_iterator fnd = unomp. finne ( WHO ) ;
hvis ( fnd == unomp. slutt ( ) )
cout << 'ikke funnet' ;
ellers
cout << endl << fnd -> først << ' er ' << fnd -> sekund << endl ;
komme tilbake 0 ;
}
Følgende er oppdelingen av koden for din forståelse:
uordnet_kart < streng , dobbelt > unomp = { } ;Et 'unordered_map' kalt 'unomp' lages med strengnøkler (navn) og doble verdier.
streng hvem ;Brukeren blir bedt om å skrive inn et navn på skjermen og inndata lagres i 'hvem'-strengvariabelen.
uordnet_kart < streng , dobbelt >:: const_iterator fnd = unomp. finne ( WHO ) ;Finn()-funksjonen brukes til å søke etter det angitte navnet i 'uordnet_kartet'. Resultatet lagres i 'fnd' iteratoren.
hvis ( fnd == unomp. slutt ( ) )cout << 'ikke funnet' ;
ellers
cout << endl << fnd -> først << ' er ' << fnd -> sekund << endl ;
Hvis 'fnd'-iteratoren når slutten av 'unordered_map' (end()), betyr det at navnet ikke ble funnet og 'ikke funnet' skrives ut. Ellers skrives navnet og tilhørende verdi ut. Her er utgangen av koden:
Denne koden fungerer i hovedsak som et enkelt navneoppslagsverktøy ved å bruke et 'unordered_map'. Den tar brukerens input, søker etter navnet på kartet og gir den tilhørende verdien hvis navnet blir funnet.
Konklusjon
Funksjonen unordered_map::find() i C++ gir en kraftig mekanisme for å effektivt finne elementene i 'unordered_map'-beholdere. Den konstante gjennomsnittlige tidskompleksiteten gjør den til et foretrukket valg for søkeoperasjoner i scenarier der nøkkelverdi-parene må nås raskt. De medfølgende eksemplene viser den praktiske bruken, og understreker dens enkelhet og effektivitet. Avslutningsvis, å mestre unordered_map::find()-funksjonen forbedrer en C++-programmerers evne til å utnytte det fulle potensialet til 'unordered_map'-beholdere, noe som bidrar til å lage optimaliserte og høyytelsesapplikasjoner.