C++ Unordered_Map::Find() Funkcija

C Unordered Map Find Funkcija



C++ garsėja galinga ir universalia standartinių šablonų biblioteka (STL), kuri kūrėjams suteikia platų paruoštų naudoti labai efektyvių konteinerių, iteratorių, algoritmų ir funkcijų rinkinį. Tarp jų „unordered_map“ išsiskiria kaip pagrindinis efektyvios raktų vertės saugojimo ir didelės spartos prieigos žaidėjas, todėl jis yra puikus pasirinkimas programoms, kuriose svarbiausia yra greitas nuskaitymas. Šio „unordered_map“ širdyje funkcija unordered_map::find() yra gyvybiškai svarbi priemonė. Ši duomenų struktūra optimizuota didelės spartos prieigai ir raktų vertės saugojimui. Šiame straipsnyje pateikiama visapusiška funkcijos unordered_map::find() analizė, atskleidžiant jos sintaksę ir parametrus iliustruojančiais pavyzdžiais.

Netvarkingo_žemėlapio supratimas::Rasti()

Funkcija unordered_map::find() skirta rasti elementą, susietą su nurodytu raktu „unordered_map“. Jo deklaracija skiriasi priklausomai nuo to, ar objektas yra pastovus, ar ne, todėl jį galima naudoti lanksčiai.

iteratoriaus radimas ( konst rakto_tipas & k ) ;

Tai naudojama, kai „netvarkingas_žemėlapis“ nėra pastovus. Šis kodas grąžina iteratorių, nukreipiantį į rastą elementą.







const_iterator rasti ( konst rakto_tipas & k ) konst ;

Ši versija taikoma, kai „netvarkingas_žemėlapis“ yra pastovus. Jis grąžina pastovų iteratorių, kurio elgsena yra panaši į nepastovią versiją.



Parametrai:



Tam reikia vieno parametro „k“, kuris yra raktas, kurio reikia ieškoti „unordered_map“.





Grąžinimo vertė:

Grąžinama vertė priklauso nuo „unordered_map“ objekto kvalifikacijos.

Metodas grąžina nepastovų iteratorių, jei objektas nėra nuolat kvalifikuojamas.



Jei objektas yra pastovus, metodas grąžina pastovų iteratorių.

Laiko sudėtingumas:

Std::unordered_map::find() laiko sudėtingumas yra labai svarbus norint suprasti jo efektyvumą:

Vidutiniu atveju laiko sudėtingumas yra pastovus (O (1)), todėl jis yra labai efektyvus tipiniais naudojimo atvejais.

Blogiausiu atveju laiko sudėtingumas tampa tiesinis (O(n)). Tačiau praktikoje toks scenarijus yra retas.

1 pavyzdys:

Panagrinėkime praktinį pavyzdį, iliustruojantį unordered_map::find() naudojimą ir naudą. Šiame pavyzdyje sukuriamas „netvarkingas_žemėlapis“ su simboliais kaip raktais ir atitinkamais sveikaisiais skaičiais kaip reikšmėmis. Funkcija find () nustato elementą, susietą su „p“ klavišu. „ittr“ iteratorius yra susietas su rastu elementu, o jo duomenys atspausdinami į konsolę. Žiūrėkite šį kodą:

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( tuštuma ) {

netvarkingas_žemėlapis < char , tarpt > unomp = {

{ 'į' , 9 } ,

{ 'a' , 6 } ,

{ 'p' , 8 } ,

{ 'aš' , 3 } ,

{ 's' , 4 } } ;

automatinis ittr = unomp. rasti ( 'p' ) ;

cout << 'Iteratorius' ' << ittr->pirma << ' ' rodo į = ' << ittr -> antra << endl ;

grąžinti 0 ; }

Išskaidykime kodą, kad jį aiškiai ir geriau suprastume:

#include

#include

Pridedami būtini antraščių failai: įvesties / išvesties operacijoms ir konteinerio „unordered_map“ naudojimui.

naudojant vardų sritį std ;

„std“ vardų erdvė supaprastina kodą. Tai leidžia naudoti elementus iš standartinės C++ bibliotekos, prieš juos nepridedant „std::“.

netvarkingas_žemėlapis < char , tarpt > unomp = { { 'į' , 9 } , { 'a' , 6 } , { 'p' , 8 } , { 'aš' , 3 } , { 's' , 4 } } ;

Sukuriamas „netvarkingas_žemėlapis“, pavadintas „um“, su simboliais („w“, „a“, „p“, „m“, „s“) kaip klavišais ir atitinkamais sveikaisiais skaičiais (9, 6, 8, 3, 4). ) kaip vertybes.

automatinis ittr = unomp. rasti ( 'p' ) ;

Funkcija find() naudojama ieškant elemento su raktu 'p' lauke 'unordered_map', kuris yra 'unomp'. „ittr“ iteratorius nurodo identifikuotą elementą.

cout << 'Iteratorius' ' << ittr->pirma << ' ' rodo į = ' << ittr -> antra << endl ;

Turinys, į kurį nurodo iteratorius, išspausdinamas konsolėje. Šiuo atveju išspausdinamas raktas („p“) ir susijusi reikšmė (8).

grąžinti 0 ;

Programa baigiama ir grąžinama 0, kad būtų rodomas sėkmingas vykdymas.

Kodo išvestis pateikiama toliau jūsų nuorodai:

Šis kodas yra paprastas pavyzdys, kaip naudoti unordered_map::find() norint efektyviai ieškoti ir pasiekti elementus „netvarkingo_žemėlapyje“. Iteratorius suteikia patogų būdą pasiekti raktą ir susijusią rasto elemento reikšmę.

2 pavyzdys:

Štai dar vienas paprastas funkcijos unordered_map::find() pavyzdys. Šis kodas parodo „unordered_map“ naudojimą, kad būtų saugomos loginės reikšmės, susietos su sveikaisiais raktais, ir tada naudoja funkciją find(), kad patikrintų, ar nėra konkrečių raktų. Pažiūrėkime šį kodą ir suprasime, kaip jis veikia:

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( ) {

netvarkingas_žemėlapis < tarpt , bool > unomp ;

unomp [ 2 ] = tiesa ;

unomp [ 67 ] = klaidinga ;

unomp [ Keturi ] = tiesa ;

unomp [ 98 ] = klaidinga ;

jeigu ( unomp. rasti ( 67 ) == unomp. galas ( ) )

cout << 'Elementas nerastas' << endl ;

Kitas

cout << 'Elementas rastas' << endl ;

jeigu ( unomp. rasti ( 42 ) == unomp. galas ( ) )

cout << 'Elementas nerastas' << endl ;

Kitas

cout << 'Elementas rastas' << endl ;

grąžinti 0 ;

}

Čia yra išsamus kodo aprašymas:

#include

Šioje eilutėje yra antraštės failas, apimantis labiausiai standartines C++ bibliotekas, kurios dažnai naudojamos konkurenciniam programavimui. Tačiau reguliariai kuriant C++, rekomenduojama įtraukti konkrečias antraštes.

netvarkingas_žemėlapis < tarpt , bool > unomp ;

„Unordered_map“ pavadinimu „unomp“ sukuriamas su sveikųjų skaičių raktais ir Būlio reikšmėmis.

unomp [ 2 ] = tiesa ;

unomp [ 67 ] = klaidinga ;

unomp [ Keturi ] = tiesa ;

unomp [ 98 ] = klaidinga ;

Rakto-reikšmių poros įterpiamos į „netvarkingą_žemėlapį“. Kiekvienas raktas (sveikasis skaičius) yra susietas su Būlio reikšme.

jeigu ( unomp. rasti ( 67 ) == unomp. galas ( ) )

cout << 'Elementas nerastas' << endl ;

Kitas

cout << 'Elementas rastas' << endl ;

Funkcija find() naudojama sąlygoje if-else ieškant konkrečių raktų (67 ir 42) „unordered_map“. Jei raktas randamas, išspausdinamas „Elementas rastas“. Kitu atveju išspausdinama „Elementas nerastas“. Žiūrėkite šią išvestį:

Šis kodas parodo pagrindinį „unordered_map“ ir Find() funkcijos naudojimą, siekiant nustatyti konkrečių klavišų buvimą ar nebuvimą žemėlapyje.

3 pavyzdys:

Išnagrinėkime kitą pavyzdį, kuris parodo vertės radimą pateikiant įvestį vykdymo metu. Ši paprasta programa naudoja „unordered_map“, kad išsaugotų vardus (kaip raktus) ir susijusias skaitines reikšmes (šiuo atveju, vaizduojančias kai kuriuos atributus). Tada jis paragins vartotoją įvesti pavadinimą, ieškoti to vardo žemėlapyje naudojant funkciją find() ir atspausdinti susijusią reikšmę, jei vardas rastas. Kodas pateikiamas toliau, kad galėtumėte sužinoti:

#include

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( ) {

std :: netvarkingas_žemėlapis < std :: styga , dvigubai > unomp = {

{ 'Herry' , 23 } ,

{ 'Kiti' , 7.4 } ,

{ 'Kalsoom' , 1.2 } } ;

eilutę kas ;

cout << 'Ko ieškai? ' ;

getline ( valgymas , PSO ) ;

netvarkingas_žemėlapis < styga , dvigubai >:: const_iterator rasti = unomp. rasti ( PSO ) ;

jeigu ( rasti == unomp. galas ( ) )

cout << 'nerastas' ;

Kitas

cout << endl << rasti -> Pirmas << 'yra' << rasti -> antra << endl ;

grąžinti 0 ;

}

Toliau pateikiamas kodo suskirstymas, kad suprastumėte:

netvarkingas_žemėlapis < styga , dvigubai > unomp = { } ;

„Unordered_map“ pavadinimu „unomp“ sukuriamas su eilučių raktais (pavadinimais) ir dvigubomis reikšmėmis.

eilutę kas ;

Vartotojas raginamas įvesti pavadinimą ekrane, o įvestis išsaugoma eilutės kintamajame „who“.

netvarkingas_žemėlapis < styga , dvigubai >:: const_iterator rasti = unomp. rasti ( PSO ) ;

Funkcija find() naudojama įvesto vardo paieškai „netvarkingo_žemėlapyje“. Rezultatas saugomas iteratoriuje „fnd“.

jeigu ( rasti == unomp. galas ( ) )

cout << 'nerastas' ;

Kitas

cout << endl << rasti -> Pirmas << 'yra' << rasti -> antra << endl ;

Jei „fnd“ iteratorius pasiekia „unordered_map“ (end()) pabaigą, tai reiškia, kad pavadinimas nerastas ir išspausdintas „not found“. Kitu atveju išspausdinamas pavadinimas ir su juo susijusi reikšmė. Čia yra kodo išvestis:

Šis kodas iš esmės veikia kaip paprastas vardų paieškos įrankis, naudojant „netvarkingą_žemėlapį“. Ji paima vartotojo įvestį, ieško vardo žemėlapyje ir pateikia susijusią reikšmę, jei vardas randamas.

Išvada

Funkcija unordered_map::find() C++ suteikia galingą mechanizmą, leidžiantį efektyviai rasti elementus „unordered_map“ konteineriuose. Dėl pastovaus vidutinio laiko sudėtingumo jis yra tinkamiausias pasirinkimas atliekant paieškos operacijas scenarijuose, kai raktų ir reikšmių poras reikia pasiekti greitai. Pateikti pavyzdžiai parodo jo praktinį panaudojimą, pabrėžia jo paprastumą ir efektyvumą. Apibendrinant galima pasakyti, kad funkcijos unordered_map::find() įvaldymas padidina C++ programuotojo gebėjimą išnaudoti visą „unordered_map“ konteinerių potencialą, prisidedant prie optimizuotų ir didelio našumo programų kūrimo.