C++ Unordered_Map::Find() Functie

C Unordered Map Find Functie



C++ staat bekend om zijn krachtige en veelzijdige standaardsjabloonbibliotheek (STL), die de ontwikkelaars een uitgebreid pakket kant-en-klare, zeer efficiënte containers, iterators, algoritmen en functies biedt. Hiervan onderscheidt de “unordered_map” zich als een belangrijke speler op het gebied van efficiënte opslag van sleutelwaarden en snelle toegang, waardoor het een uitstekende keuze is voor toepassingen waarbij snel ophalen van het grootste belang is. In het hart van deze “unordered_map” is de unordered_map::find() functie een essentieel instrument. Deze datastructuur is geoptimaliseerd voor snelle toegang en opslag van sleutelwaarden. Dit artikel biedt een uitgebreid onderzoek van de functie unordered_map::find() door de syntaxis en parameters ervan te onthullen met behulp van illustratieve voorbeelden.

De Unordered_Map::Find() begrijpen

De functie unordered_map::find() is ontworpen om een ​​element te lokaliseren dat is gekoppeld aan een opgegeven sleutel binnen een “unordered_map”. De verklaring ervan varieert afhankelijk van het feit of het object constant gekwalificeerd is of niet, waardoor flexibiliteit in het gebruik ervan wordt geboden.

iterator vinden ( const sleutel type & k ) ;

Dit wordt gebruikt wanneer de “unordered_map” niet constant gekwalificeerd is. Deze code retourneert een iterator die naar het gevonden element verwijst.







const_iterator vinden ( const sleutel type & k ) const ;

Deze versie is van toepassing wanneer de “unordered_map” constant gekwalificeerd is. Het retourneert een constante iterator met een soortgelijk gedrag als de niet-constante versie.



Parameters:



Er is één enkele parameter nodig, “k”, de sleutel die moet worden doorzocht binnen de “unordered_map”.





Winstwaarde:

De retourwaarde is afhankelijk van de kwalificatie van het object “unordered_map”.

De methode retourneert een niet-constante iterator als het object niet constant gekwalificeerd is.



Als het object constant gekwalificeerd is, retourneert de methode een constante iterator.

Tijdcomplexiteit:

De tijdscomplexiteit van std::unordered_map::find() is cruciaal voor het begrijpen van de efficiëntie ervan:

In het gemiddelde geval is de tijdscomplexiteit constant (O(1)), waardoor deze zeer efficiënt is voor typische gebruikssituaties.

In het ergste geval wordt de tijdscomplexiteit lineair (O(n)). Dit scenario komt in de praktijk echter zelden voor.

Voorbeeld 1:

Laten we een praktisch voorbeeld verkennen om het gebruik en de voordelen van unordered_map::find() te illustreren. In dit voorbeeld wordt een “unordered_map” gemaakt met de tekens als sleutels en de bijbehorende gehele getallen als waarden. De functie find() lokaliseert het element dat is gekoppeld aan de sleutel “p”. De ittr-iterator is gekoppeld aan het gevonden element en de gegevens ervan worden naar de console afgedrukt. Zie de volgende code:

#include

#include

namespace std; gebruiken ;

int voornaamst ( leegte ) {

ongeordende_kaart < verkoold , int > unmp = {

{ 'In' , 9 } ,

{ 'A' , 6 } ,

{ 'P' , 8 } ,

{ 'M' , 3 } ,

{ 'S' , 4 } } ;

auto ittr = unmp. vinden ( 'P' ) ;

uit << 'Iterator' ' << ittr->eerste << ' ' wijst naar = ' << ittr -> seconde << eindl ;

opbrengst 0 ; }

Laten we de code uitsplitsen om er een duidelijk en beter begrip van te krijgen:

#include

#include

De benodigde headerbestanden zijn inbegrepen: voor invoer/uitvoerbewerkingen en voor het gebruik van de container “unordered_map”.

namespace std; gebruiken ;

De naamruimte “std” vereenvoudigt de code. Hiermee kunt u de elementen uit de standaard C++-bibliotheek gebruiken zonder ze vooraf te laten gaan door “std::”.

ongeordende_kaart < verkoold , int > unmp = { { 'In' , 9 } , { 'A' , 6 } , { 'P' , 8 } , { 'M' , 3 } , { 'S' , 4 } } ;

Er wordt een “unordered_map” met de naam “um” gemaakt met de tekens ('w', 'a', 'p', 'm', 's') als sleutels en de bijbehorende gehele getallen (9, 6, 8, 3, 4 ) als waarden.

auto ittr = unmp. vinden ( 'P' ) ;

De functie find() wordt gebruikt om te zoeken naar het element met de sleutel “p” in de “unordered_map” die “unomp” is. De ittr-iterator verwijst naar het geïdentificeerde element.

uit << 'Iterator' ' << ittr->eerste << ' ' wijst naar = ' << ittr -> seconde << eindl ;

De inhoud waarnaar de iterator verwijst, wordt naar de console afgedrukt. In dit geval wordt de sleutel (“p”) en de bijbehorende waarde (8) afgedrukt.

opbrengst 0 ;

Het programma wordt beëindigd en retourneert 0 om een ​​succesvolle uitvoering aan te geven.

De uitvoer van de code wordt hieronder ter referentie weergegeven:

Deze code is een eenvoudig voorbeeld van het gebruik van de unordered_map::find() om efficiënt te zoeken naar en toegang te krijgen tot de elementen binnen een “unordered_map”. De iterator biedt een handige manier om toegang te krijgen tot zowel de sleutel als de bijbehorende waarde van het gevonden element.

Voorbeeld 2:

Hier is nog een eenvoudig voorbeeld van de functie unordered_map::find(). Deze code demonstreert het gebruik van “unordered_map” om de Booleaanse waarden op te slaan die zijn gekoppeld aan integer-sleutels en gebruikt vervolgens de functie find() om te controleren op het bestaan ​​van specifieke sleutels. Laten we de volgende code bekijken en vervolgens begrijpen hoe deze werkt:

#include

namespace std; gebruiken ;

int voornaamst ( ) {

ongeordende_kaart < int , bool > unmp ;

unmp [ 2 ] = WAAR ;

unmp [ 67 ] = vals ;

unmp [ Vier vijf ] = WAAR ;

unmp [ 98 ] = vals ;

als ( unmp. vinden ( 67 ) == unmp. einde ( ) )

uit << 'Element niet gevonden' << eindl ;

anders

uit << 'Element gevonden' << eindl ;

als ( unmp. vinden ( 42 ) == unmp. einde ( ) )

uit << 'Element niet gevonden' << eindl ;

anders

uit << 'Element gevonden' << eindl ;

opbrengst 0 ;

}

Hier is een gedetailleerde beschrijving van de code:

#include

Deze regel bevat een headerbestand dat de meest standaard C++-bibliotheken omvat die vaak worden gebruikt bij competitief programmeren. Bij een reguliere C++-ontwikkeling wordt het echter aanbevolen om de specifieke headers op te nemen.

ongeordende_kaart < int , bool > unmp ;

Er wordt een “unordered_map” met de naam “unomp” gemaakt met gehele getallen en Booleaanse waarden.

unmp [ 2 ] = WAAR ;

unmp [ 67 ] = vals ;

unmp [ Vier vijf ] = WAAR ;

unmp [ 98 ] = vals ;

De sleutel-waardeparen worden ingevoegd in de “unordered_map”. Elke sleutel (geheel getal) is gekoppeld aan een Booleaanse waarde.

als ( unmp. vinden ( 67 ) == unmp. einde ( ) )

uit << 'Element niet gevonden' << eindl ;

anders

uit << 'Element gevonden' << eindl ;

De functie find() wordt gebruikt binnen de if-else-voorwaarde om te zoeken naar specifieke sleutels (67 en 42) binnen de “unordered_map”. Als de sleutel wordt gevonden, wordt “Element gevonden” afgedrukt. Anders wordt “Element niet gevonden” afgedrukt. Zie de volgende uitvoer:

Deze code demonstreert het basisgebruik van “unordered_map” en de functie find() om de aanwezigheid of afwezigheid van specifieke sleutels op de kaart te bepalen.

Voorbeeld 3:

Laten we een ander voorbeeld onderzoeken dat het vinden van een waarde demonstreert door tijdens runtime invoer te geven. Dit eenvoudige programma gebruikt een “unordered_map” om de namen (als sleutels) en bijbehorende numerieke waarden (in dit geval enkele attributen) op te slaan. Vervolgens wordt de gebruiker gevraagd een naam in te voeren, naar die naam op de kaart te zoeken met behulp van de functie find() en de bijbehorende waarde af te drukken als de naam wordt gevonden. De code wordt hieronder ter referentie gegeven:

#include

#include

#include

namespace std; gebruiken ;

int voornaamst ( ) {

soa :: ongeordende_kaart < soa :: snaar , dubbele > unmp = {

{ 'Herrie' , 23 } ,

{ 'Anderen' , 7.4 } ,

{ 'Kalsom' , 1.2 } } ;

touwtje wie ;

uit << 'Naar wie ben je op zoek? ' ;

lijn krijgen ( aan het eten , WHO ) ;

ongeordende_kaart < snaar , dubbele >:: const_iterator vind = unmp. vinden ( WHO ) ;

als ( vind == unmp. einde ( ) )

uit << 'niet gevonden' ;

anders

uit << eindl << vind -> Eerst << ' is ' << vind -> seconde << eindl ;

opbrengst 0 ;

}

Voor uw begrip volgt hieronder de uitsplitsing van de code:

ongeordende_kaart < snaar , dubbele > unmp = { } ;

Er wordt een “unordered_map” met de naam “unomp” gemaakt met tekenreekssleutels (namen) en dubbele waarden.

touwtje wie ;

De gebruiker wordt gevraagd een naam in te voeren op het scherm en de invoer wordt opgeslagen in de stringvariabele “wie”.

ongeordende_kaart < snaar , dubbele >:: const_iterator vind = unmp. vinden ( WHO ) ;

De functie find() wordt gebruikt om naar de ingevoerde naam in de “unordered_map” te zoeken. Het resultaat wordt opgeslagen in de “fnd”-iterator.

als ( vind == unmp. einde ( ) )

uit << 'niet gevonden' ;

anders

uit << eindl << vind -> Eerst << ' is ' << vind -> seconde << eindl ;

Als de “fnd”-iterator het einde van de “unordered_map” (end()) bereikt, betekent dit dat de naam niet is gevonden en dat “not found” wordt afgedrukt. Anders worden de naam en de bijbehorende waarde afgedrukt. Hier is de uitvoer van de code:

Deze code fungeert in wezen als een eenvoudig hulpmiddel voor het opzoeken van namen met behulp van een 'unordered_map'. Het vereist de invoer van de gebruiker, zoekt naar de naam op de kaart en levert de bijbehorende waarde als de naam wordt gevonden.

Conclusie

De functie unordered_map::find() in C++ biedt een krachtig mechanisme om de elementen binnen “unordered_map”-containers efficiënt te lokaliseren. De constante gemiddelde tijdscomplexiteit maakt het een voorkeurskeuze voor zoekbewerkingen in scenario's waarin de sleutel-waardeparen snel toegankelijk moeten zijn. De gegeven voorbeelden tonen het praktische gebruik ervan en benadrukken de eenvoud en effectiviteit ervan. Concluderend vergroot het beheersen van de functie unordered_map::find() het vermogen van een C++-programmeur om het volledige potentieel van “unordered_map”-containers te benutten, wat bijdraagt ​​aan de creatie van geoptimaliseerde en krachtige applicaties.