C++ Unordered_Map::Find()-Funktion

C Unordered Map Find Funktion



C++ ist bekannt für seine leistungsstarke und vielseitige Standardvorlagenbibliothek (STL), die den Entwicklern eine umfangreiche Suite gebrauchsfertiger, hocheffizienter Container, Iteratoren, Algorithmen und Funktionen bietet. Unter diesen sticht die „unordered_map“ als Schlüsselfaktor für effiziente Schlüsselwertspeicherung und Hochgeschwindigkeitszugriff hervor, was sie zu einer ausgezeichneten Wahl für Anwendungen macht, bei denen ein schneller Abruf von größter Bedeutung ist. Im Herzen dieser „unordered_map“ ist die Funktion unordered_map::find() ein wichtiges Instrument. Diese Datenstruktur ist für Hochgeschwindigkeitszugriff und Schlüsselwertspeicherung optimiert. Dieser Artikel bietet eine umfassende Untersuchung der Funktion unordered_map::find(), indem er ihre Syntax und Parameter anhand anschaulicher Beispiele enthüllt.

Unordered_Map::Find() verstehen

Die Funktion unordered_map::find() dient zum Auffinden eines Elements, das einem angegebenen Schlüssel innerhalb einer „unordered_map“ zugeordnet ist. Seine Deklaration variiert je nachdem, ob das Objekt konstant qualifiziert ist oder nicht, was Flexibilität bei der Verwendung bietet.

Iterator-Suche ( const Schlüsselart & k ) ;

Dies wird verwendet, wenn die „unordered_map“ nicht konstant qualifiziert ist. Dieser Code gibt einen Iterator zurück, der auf das gefundene Element zeigt.







const_iterator finden ( const Schlüsselart & k ) const ;

Diese Version ist anwendbar, wenn die „unordered_map“ konstant qualifiziert ist. Es gibt einen konstanten Iterator mit einem ähnlichen Verhalten wie die nicht konstante Version zurück.



Parameter:



Es benötigt einen einzelnen Parameter, „k“, der der Schlüssel ist, der in der „unordered_map“ durchsucht werden soll.





Rückgabewert:

Der Rückgabewert hängt von der Qualifikation des „unordered_map“-Objekts ab.

Die Methode gibt einen nicht konstanten Iterator zurück, wenn das Objekt nicht konstant qualifiziert ist.



Wenn das Objekt durch eine Konstante qualifiziert ist, gibt die Methode einen konstanten Iterator zurück.

Zeitkomplexität:

Die zeitliche Komplexität von std::unordered_map::find() ist entscheidend für das Verständnis seiner Effizienz:

Im Durchschnitt ist die Zeitkomplexität konstant (O(1)), was sie für typische Anwendungsfälle äußerst effizient macht.

Im schlimmsten Fall wird die Zeitkomplexität linear (O(n)). Allerdings kommt dieses Szenario in der Praxis selten vor.

Beispiel 1:

Sehen wir uns ein praktisches Beispiel an, um die Verwendung und Vorteile von unordered_map::find() zu veranschaulichen. In diesem Beispiel wird eine „unordered_map“ mit den Zeichen als Schlüsseln und den entsprechenden Ganzzahlen als Werten erstellt. Die Funktion find() findet das Element, das mit dem Schlüssel „p“ verknüpft ist. Der „ittr“-Iterator wird mit dem gefundenen Element verknüpft und seine Daten werden auf der Konsole ausgegeben. Siehe den folgenden Code:

#include

#include

Verwenden des Namensraums std ;

int hauptsächlich ( Leere ) {

unordered_map < verkohlen , int > unomp = {

{ 'In' , 9 } ,

{ 'A' , 6 } ,

{ 'P' , 8 } ,

{ 'M' , 3 } ,

{ 'S' , 4 } } ;

Auto ittr = unomp. finden ( 'P' ) ;

cout << „Iterator“ ' << ittr->first << ' „zeigt auf =“ << ittr -> zweite << endl ;

zurückkehren 0 ; }

Lassen Sie uns den Code aufschlüsseln, um ihn klarer und besser zu verstehen:

#include

#include

Die notwendigen Header-Dateien sind enthalten: für Ein-/Ausgabeoperationen und für die Verwendung des „unordered_map“-Containers.

Verwenden des Namensraums std ;

Der Namespace „std“ vereinfacht den Code. Damit können Sie die Elemente aus der Standard-C++-Bibliothek verwenden, ohne ihnen „std::“ voranzustellen.

unordered_map < verkohlen , int > unomp = { { 'In' , 9 } , { 'A' , 6 } , { 'P' , 8 } , { 'M' , 3 } , { 'S' , 4 } } ;

Es wird eine „unordered_map“ namens „um“ mit den Zeichen ('w', 'a', 'p', 'm', 's') als Schlüssel und den entsprechenden Ganzzahlen (9, 6, 8, 3, 4) erstellt ) als Werte.

Auto ittr = unomp. finden ( 'P' ) ;

Die Funktion find() wird verwendet, um in der „unordered_map“, also „unomp“, nach dem Element mit dem Schlüssel „p“ zu suchen. Der Iterator „ittr“ zeigt auf das identifizierte Element.

cout << „Iterator“ ' << ittr->first << ' „zeigt auf =“ << ittr -> zweite << endl ;

Der Inhalt, auf den der Iterator verweist, wird auf der Konsole ausgegeben. In diesem Fall werden der Schlüssel („p“) und der zugehörige Wert (8) ausgegeben.

zurückkehren 0 ;

Das Programm wird beendet und gibt 0 zurück, um eine erfolgreiche Ausführung anzuzeigen.

Die Ausgabe des Codes wird im Folgenden als Referenz angegeben:

Dieser Code ist ein einfaches Beispiel für die Verwendung von unordered_map::find() zur effizienten Suche nach und Zugriff auf die Elemente innerhalb einer „unordered_map“. Der Iterator bietet eine bequeme Möglichkeit, sowohl auf den Schlüssel als auch auf den zugehörigen Wert des gefundenen Elements zuzugreifen.

Beispiel 2:

Hier ist ein weiteres einfaches Beispiel für die Funktion unordered_map::find(). Dieser Code demonstriert die Verwendung von „unordered_map“ zum Speichern der booleschen Werte, die mit Ganzzahlschlüsseln verknüpft sind, und verwendet dann die Funktion „find()“, um die Existenz bestimmter Schlüssel zu überprüfen. Schauen wir uns den folgenden Code an und verstehen dann, wie er funktioniert:

#include

Verwenden des Namensraums std ;

int hauptsächlich ( ) {

unordered_map < int , bool > unomp ;

unomp [ 2 ] = WAHR ;

unomp [ 67 ] = FALSCH ;

unomp [ Vier fünf ] = WAHR ;

unomp [ 98 ] = FALSCH ;

Wenn ( unomp. finden ( 67 ) == unomp. Ende ( ) )

cout << „Element nicht gefunden“ << endl ;

anders

cout << „Element gefunden“ << endl ;

Wenn ( unomp. finden ( 42 ) == unomp. Ende ( ) )

cout << „Element nicht gefunden“ << endl ;

anders

cout << „Element gefunden“ << endl ;

zurückkehren 0 ;

}

Hier ist eine detaillierte Beschreibung des Codes:

#include

Diese Zeile enthält eine Header-Datei, die die meisten Standard-C++-Bibliotheken abdeckt, die häufig in der Wettbewerbsprogrammierung verwendet werden. In einer regulären C++-Entwicklung wird jedoch empfohlen, die spezifischen Header einzuschließen.

unordered_map < int , bool > unomp ;

Eine „unordered_map“ namens „unomp“ wird mit ganzzahligen Schlüsseln und booleschen Werten erstellt.

unomp [ 2 ] = WAHR ;

unomp [ 67 ] = FALSCH ;

unomp [ Vier fünf ] = WAHR ;

unomp [ 98 ] = FALSCH ;

Die Schlüssel-Wert-Paare werden in die „unordered_map“ eingefügt. Jeder Schlüssel (Ganzzahl) ist einem booleschen Wert zugeordnet.

Wenn ( unomp. finden ( 67 ) == unomp. Ende ( ) )

cout << „Element nicht gefunden“ << endl ;

anders

cout << „Element gefunden“ << endl ;

Die Funktion find() wird innerhalb der if-else-Bedingung verwendet, um nach bestimmten Schlüsseln (67 und 42) innerhalb der „unordered_map“ zu suchen. Wenn der Schlüssel gefunden wird, wird „Element gefunden“ gedruckt. Andernfalls wird „Element nicht gefunden“ gedruckt. Siehe die folgende Ausgabe:

Dieser Code zeigt die grundlegende Verwendung von „unordered_map“ und der Funktion find(), um das Vorhandensein oder Fehlen bestimmter Schlüssel in der Karte zu bestimmen.

Beispiel 3:

Sehen wir uns ein weiteres Beispiel an, das das Finden eines Werts durch Bereitstellung einer Eingabe zur Laufzeit demonstriert. Dieses einfache Programm verwendet eine „unordered_map“, um die Namen (als Schlüssel) und die zugehörigen numerischen Werte (in diesem Fall einige Attribute) zu speichern. Anschließend wird der Benutzer aufgefordert, einen Namen einzugeben, mithilfe der Funktion „find()“ in der Karte nach diesem Namen zu suchen und den zugehörigen Wert auszudrucken, wenn der Name gefunden wird. Der Code wird im Folgenden als Referenz angegeben:

#include

#include

#include

Verwenden des Namensraums std ;

int hauptsächlich ( ) {

std :: unordered_map < std :: Zeichenfolge , doppelt > unomp = {

{ „Herry“ , 23 } ,

{ 'Andere' , 7.4 } ,

{ „Kalsoom“ , 1.2 } } ;

String wer ;

cout << 'Nach wem suchst du? ' ;

getline ( Essen , WHO ) ;

unordered_map < Zeichenfolge , doppelt >:: const_iterator fnd = unomp. finden ( WHO ) ;

Wenn ( fnd == unomp. Ende ( ) )

cout << 'nicht gefunden' ;

anders

cout << endl << fnd -> Erste << ' Ist ' << fnd -> zweite << endl ;

zurückkehren 0 ;

}

Im Folgenden finden Sie die Aufschlüsselung des Codes zum besseren Verständnis:

unordered_map < Zeichenfolge , doppelt > unomp = { } ;

Eine „unordered_map“ mit dem Namen „unomp“ wird mit String-Schlüsseln (Namen) und Double-Werten erstellt.

String wer ;

Der Benutzer wird auf dem Bildschirm aufgefordert, einen Namen einzugeben, und die Eingabe wird in der Zeichenfolgenvariablen „who“ gespeichert.

unordered_map < Zeichenfolge , doppelt >:: const_iterator fnd = unomp. finden ( WHO ) ;

Mit der Funktion find() wird nach dem eingegebenen Namen in der „unordered_map“ gesucht. Das Ergebnis wird im Iterator „fnd“ gespeichert.

Wenn ( fnd == unomp. Ende ( ) )

cout << 'nicht gefunden' ;

anders

cout << endl << fnd -> Erste << ' Ist ' << fnd -> zweite << endl ;

Wenn der „fnd“-Iterator das Ende der „unordered_map“ (end()) erreicht, bedeutet dies, dass der Name nicht gefunden wurde und „nicht gefunden“ gedruckt wird. Andernfalls werden der Name und der zugehörige Wert gedruckt. Hier ist die Ausgabe des Codes:

Dieser Code fungiert im Wesentlichen als einfaches Namenssuchtool unter Verwendung einer „unordered_map“. Es nimmt die Benutzereingabe entgegen, sucht in der Karte nach dem Namen und stellt den zugehörigen Wert bereit, wenn der Name gefunden wird.

Abschluss

Die Funktion unordered_map::find() in C++ bietet einen leistungsstarken Mechanismus zum effizienten Auffinden der Elemente in „unordered_map“-Containern. Aufgrund seiner konstanten durchschnittlichen Zeitkomplexität ist es eine bevorzugte Wahl für Suchvorgänge in Szenarien, in denen schnell auf die Schlüssel-Wert-Paare zugegriffen werden muss. Die bereitgestellten Beispiele veranschaulichen die praktische Anwendung und unterstreichen seine Einfachheit und Wirksamkeit. Zusammenfassend lässt sich sagen, dass die Beherrschung der Funktion unordered_map::find() die Fähigkeit eines C++-Programmierers verbessert, das volle Potenzial von „unordered_map“-Containern auszuschöpfen und so zur Erstellung optimierter und leistungsstarker Anwendungen beizutragen.