Razumijevanje Unordered_Map::Find()
Funkcija unordered_map::find() dizajnirana je za lociranje elementa koji je povezan s određenim ključem unutar 'unordered_map'. Njegova deklaracija varira ovisno o tome je li objekt konstantno kvalificiran ili ne, pružajući fleksibilnost u njegovoj upotrebi.
pronalazak iteratora ( konst tip_ključa i k ) ;Ovo se koristi kada 'unordered_map' nije kvalificirana konstanta. Ovaj kod vraća iterator koji pokazuje na pronađeni element.
const_iterator pronaći ( konst tip_ključa i k ) konst ;
Ova verzija je primjenjiva kada je 'unordered_map' konstantno kvalificiran. Vraća konstantni iterator sa sličnim ponašanjem kao nekonstantna verzija.
Parametri:
Potreban je jedan parametar, 'k', koji je ključ koji se traži unutar 'unordered_map'.
Povratna vrijednost:
Povratna vrijednost ovisi o kvalifikaciji objekta 'unordered_map'.
Metoda vraća iterator koji nije konstantan ako objekt nije stalno kvalificiran.
Ako je objekt kvalificiran konstantom, metoda vraća konstantni iterator.
Vremenska složenost:
Vremenska složenost std::unordered_map::find() ključna je za razumijevanje njegove učinkovitosti:
U prosječnom slučaju, vremenska složenost je konstantna (O(1)), što ga čini vrlo učinkovitim za tipične slučajeve upotrebe.
U najgorem slučaju, vremenska složenost postaje linearna (O(n)). Međutim, ovaj scenarij je rijedak u praksi.
Primjer 1:
Istražimo praktični primjer za ilustraciju upotrebe i prednosti unordered_map::find(). U ovom primjeru, kreirana je 'unordered_map' sa znakovima kao ključevima i odgovarajućim cijelim brojevima kao vrijednostima. Funkcija find() locira element koji je povezan s ključem 'p'. Iterator “ittr” povezan je s pronađenim elementom i njegovi se podaci ispisuju na konzoli. Pogledajte sljedeći kôd:
#include#include
koristeći prostor imena std ;
int glavni ( poništiti ) {
neuređena_mapa < char , int > unomp = {
{ 'U' , 9 } ,
{ 'a' , 6 } ,
{ 'p' , 8 } ,
{ 'm' , 3 } ,
{ 's' , 4 } } ;
auto ittr = unomp. pronaći ( 'p' ) ;
cout << 'Iterator' ' << ittr->prvi << ' ' pokazuje na = ' << ittr -> drugi << endl ;
povratak 0 ; }
Razdvojimo kod kako bismo ga bolje razumjeli:
#include#include
Uključene su potrebne datoteke zaglavlja:
Prostor imena 'std' pojednostavljuje kod. Omogućuje vam korištenje elemenata iz standardne C++ biblioteke bez dodavanja prefiksa 'std::'.
neuređena_mapa < char , int > unomp = { { 'U' , 9 } , { 'a' , 6 } , { 'p' , 8 } , { 'm' , 3 } , { 's' , 4 } } ;“Unordered_map” pod nazivom “um” kreira se sa znakovima ('w', 'a', 'p', 'm', 's') kao ključevima i odgovarajućim cijelim brojevima (9, 6, 8, 3, 4 ) kao vrijednosti.
auto ittr = unomp. pronaći ( 'p' ) ;Funkcija find() koristi se za traženje elementa s ključem 'p' u 'unordered_map' koji je 'unomp'. Iterator “ittr” pokazuje na identificirani element.
cout << 'Iterator' ' << ittr->prvi << ' ' pokazuje na = ' << ittr -> drugi << endl ;Sadržaj na koji pokazuje iterator ispisuje se na konzoli. Ispisuje ključ ('p') i pridruženu vrijednost (8) u ovom slučaju.
povratak 0 ;Program završava, vraćajući 0 da označi uspješno izvršenje.
Izlaz koda dan je u nastavku za vašu referencu:
Ovaj kod je jednostavan primjer korištenja unordered_map::find() za učinkovito traženje i pristup elementima unutar 'unordered_map'. Iterator pruža prikladan način za pristup i ključu i pridruženoj vrijednosti pronađenog elementa.
Primjer 2:
Evo još jednog jednostavnog primjera funkcije unordered_map::find(). Ovaj kôd demonstrira korištenje 'unordered_map' za pohranjivanje Booleovih vrijednosti povezanih s ključevima cijelog broja, a zatim koristi funkciju find() za provjeru postojanja određenih ključeva. Pogledajmo sljedeći kod i shvatimo kako funkcionira:
#includekoristeći prostor imena std ;
int glavni ( ) {
neuređena_mapa < int , bool > unomp ;
unomp [ 2 ] = pravi ;
unomp [ 67 ] = lažno ;
unomp [ Četiri pet ] = pravi ;
unomp [ 98 ] = lažno ;
ako ( unomp. pronaći ( 67 ) == unomp. kraj ( ) )
cout << 'Element nije pronađen' << endl ;
drugo
cout << 'Pronađen element' << endl ;
ako ( unomp. pronaći ( 42 ) == unomp. kraj ( ) )
cout << 'Element nije pronađen' << endl ;
drugo
cout << 'Pronađen element' << endl ;
povratak 0 ;
}
Evo detaljnog opisa koda:
#includeOvaj redak uključuje datoteku zaglavlja koja pokriva većinu standardnih C++ biblioteka koje se često koriste u kompetitivnom programiranju. Međutim, u redovitom razvoju C++-a preporučuje se uključiti određena zaglavlja.
neuređena_mapa < int , bool > unomp ;'Unordered_map' pod nazivom 'unomp' kreira se s ključevima cijelog broja i Booleovim vrijednostima.
unomp [ 2 ] = pravi ;unomp [ 67 ] = lažno ;
unomp [ Četiri pet ] = pravi ;
unomp [ 98 ] = lažno ;
Parovi ključ-vrijednost umetnuti su u 'unordered_map'. Svaki ključ (cijeli broj) pridružen je Booleovoj vrijednosti.
ako ( unomp. pronaći ( 67 ) == unomp. kraj ( ) )cout << 'Element nije pronađen' << endl ;
drugo
cout << 'Pronađen element' << endl ;
Funkcija find() koristi se unutar if-else uvjeta za traženje određenih ključeva (67 i 42) unutar 'unordered_map'. Ako je ključ pronađen, ispisuje se 'Element found'. U protivnom se ispisuje 'Element nije pronađen'. Pogledajte sljedeći izlaz:
Ovaj kod prikazuje osnovnu upotrebu 'unordered_map' i funkcije find() za utvrđivanje prisutnosti ili odsutnosti određenih ključeva u mapi.
Primjer 3:
Istražimo još jedan primjer koji demonstrira pronalaženje vrijednosti unosom podataka tijekom izvođenja. Ovaj jednostavan program koristi 'unordered_map' za pohranjivanje imena (kao ključeva) i pridruženih numeričkih vrijednosti (u ovom slučaju predstavljaju neke atribute). Zatim traži od korisnika da unese ime, potraži to ime na karti pomoću funkcije find() i ispiše pridruženu vrijednost ako je ime pronađeno. Kôd je naveden u nastavku za vašu referencu:
#include#include
#include
koristeći prostor imena std ;
int glavni ( ) {
std :: neuređena_mapa < std :: niz , dvostruko > unomp = {
{ 'Herry' , 23 } ,
{ 'Drugi' , 7.4 } ,
{ 'Kalsoom' , 1.2 } } ;
string tko ;
cout << 'Koga tražite? ' ;
getline ( jelo , WHO ) ;
neuređena_mapa < niz , dvostruko >:: const_iterator pronaći = unomp. pronaći ( WHO ) ;
ako ( pronaći == unomp. kraj ( ) )
cout << 'nije pronađeno' ;
drugo
cout << endl << pronaći -> prvi << ' je ' << pronaći -> drugi << endl ;
povratak 0 ;
}
Slijedi raščlamba koda za vaše razumijevanje:
neuređena_mapa < niz , dvostruko > unomp = { } ;'Unordered_map' pod nazivom 'unomp' kreira se s ključevima niza (imena) i dvostrukim vrijednostima.
string tko ;Od korisnika se traži da unese ime na zaslonu, a unos se pohranjuje u varijablu niza 'who'.
neuređena_mapa < niz , dvostruko >:: const_iterator pronaći = unomp. pronaći ( WHO ) ;Funkcija find() koristi se za traženje unesenog imena u “unordered_map”. Rezultat je pohranjen u iteratoru 'fnd'.
ako ( pronaći == unomp. kraj ( ) )cout << 'nije pronađeno' ;
drugo
cout << endl << pronaći -> prvi << ' je ' << pronaći -> drugi << endl ;
Ako iterator “fnd” dođe do kraja “unordered_map” (end()), to znači da ime nije pronađeno i ispisuje se “not found”. U protivnom se ispisuje naziv i njegova pridružena vrijednost. Evo izlaza koda:
Ovaj kod u suštini djeluje kao jednostavan alat za traženje imena koristeći 'unordered_map'. Uzima korisnički unos, traži naziv na karti i pruža pridruženu vrijednost ako je naziv pronađen.
Zaključak
Funkcija unordered_map::find() u C++ pruža snažan mehanizam za učinkovito lociranje elemenata unutar spremnika 'unordered_map'. Njegova stalna prosječna vremenska složenost čini ga preferiranim izborom za operacije pretraživanja u scenarijima u kojima se parovima ključ-vrijednost mora pristupiti brzo. Navedeni primjeri pokazuju njegovu praktičnu upotrebu, naglašavajući njegovu jednostavnost i učinkovitost. Zaključno, ovladavanje unordered_map::find() funkcijom poboljšava sposobnost C++ programera da iskoristi puni potencijal 'unordered_map' spremnika, pridonoseći stvaranju optimiziranih i visokoučinkovitih aplikacija.