Συνάρτηση C++ Unordered_Map::Find().

Synartese C Unordered Map Find



Η C++ είναι γνωστή για την πανίσχυρη και ευέλικτη τυπική βιβλιοθήκη προτύπων (STL), η οποία παρέχει στους προγραμματιστές μια εκτενή σουίτα έτοιμα προς χρήση, εξαιρετικά αποδοτικών κοντέινερ, επαναλήπτες, αλγόριθμους και λειτουργίες. Μεταξύ αυτών, το 'unordered_map' ξεχωρίζει ως βασικός παίκτης στην αποτελεσματική αποθήκευση κλειδιών-τιμών και στην πρόσβαση υψηλής ταχύτητας, καθιστώντας το μια εξαιρετική επιλογή για εφαρμογές όπου η γρήγορη ανάκτηση είναι πρωταρχικής σημασίας. Στην καρδιά αυτού του 'unordered_map', η συνάρτηση unordered_map::find() είναι ένα ζωτικό όργανο. Αυτή η δομή δεδομένων είναι βελτιστοποιημένη για πρόσβαση υψηλής ταχύτητας και αποθήκευση κλειδιών-τιμών. Αυτό το άρθρο προσφέρει μια ολοκληρωμένη εξέταση της συνάρτησης unordered_map::find() αποκαλύπτοντας τη σύνταξη και τις παραμέτρους της με τη βοήθεια επεξηγηματικών παραδειγμάτων.

Κατανόηση του Unordered_Map::Find()

Η συνάρτηση unordered_map::find() έχει σχεδιαστεί για να εντοπίζει ένα στοιχείο που σχετίζεται με ένα καθορισμένο κλειδί μέσα σε έναν 'unordered_map'. Η δήλωσή του ποικίλλει ανάλογα με το αν το αντικείμενο είναι σταθερό ή όχι, παρέχοντας ευελιξία στη χρήση του.

επαναλήπτης εύρεση ( συνθ key_type & κ ) ;

Αυτό χρησιμοποιείται όταν το 'unordered_map' δεν είναι σταθερό. Αυτός ο κώδικας επιστρέφει έναν επαναλήπτη που δείχνει στο στοιχείο που βρέθηκε.







const_iterator βρείτε ( συνθ key_type & κ ) συνθ ;

Αυτή η έκδοση ισχύει όταν το 'unordered_map' είναι σταθερό. Επιστρέφει έναν σταθερό επαναλήπτη με παρόμοια συμπεριφορά με τη μη σταθερή έκδοση.



Παράμετροι:



Χρειάζεται μια παράμετρος, το 'k', η οποία είναι το κλειδί για αναζήτηση στο 'unordered_map'.





Αξία επιστροφής:

Η επιστρεφόμενη τιμή εξαρτάται από τον χαρακτηρισμό του αντικειμένου 'unordered_map'.

Η μέθοδος επιστρέφει έναν μη σταθερό επαναλήπτη εάν το αντικείμενο δεν είναι διαρκώς αναγνωρισμένο.



Εάν το αντικείμενο είναι σταθερό, η μέθοδος επιστρέφει έναν σταθερό επαναλήπτη.

Χρονική πολυπλοκότητα:

Η χρονική πολυπλοκότητα του std::unordered_map::find() είναι κρίσιμη για την κατανόηση της αποτελεσματικότητάς του:

Στη μέση περίπτωση, η χρονική πολυπλοκότητα είναι σταθερή (O(1)), καθιστώντας την εξαιρετικά αποτελεσματική για τυπικές περιπτώσεις χρήσης.

Στο χειρότερο σενάριο, η χρονική πολυπλοκότητα γίνεται γραμμική (O(n)). Ωστόσο, αυτό το σενάριο είναι σπάνιο στην πράξη.

Παράδειγμα 1:

Ας εξερευνήσουμε ένα πρακτικό παράδειγμα για να δείξουμε τη χρήση και τα οφέλη του unordered_map::find(). Σε αυτό το παράδειγμα, δημιουργείται ένας 'unordered_map' με τους χαρακτήρες ως κλειδιά και τους αντίστοιχους ακέραιους αριθμούς ως τιμές. Η συνάρτηση find() εντοπίζει το στοιχείο που είναι συνδεδεμένο με το κλειδί του 'p'. Ο επαναλήπτης 'ittr' συνδέεται με το στοιχείο που βρέθηκε και τα δεδομένα του εκτυπώνονται στην κονσόλα. Δείτε τον παρακάτω κώδικα:

#include

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( κενός ) {

unordered_map < απανθρακώνω , ενθ > unomp = {

{ 'Σε' , 9 } ,

{ 'ένα' , 6 } ,

{ 'Π' , 8 } ,

{ 'Μ' , 3 } ,

{ 'μικρό' , 4 } } ;

αυτο ittr = unomp. εύρημα ( 'Π' ) ;

cout << 'Iterator' ' << ittr->πρώτο << ' ' δείχνει σε = ' << ittr -> δεύτερος << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ; }

Ας αναλύσουμε τον κώδικα για να έχουμε μια σαφή και καλύτερη κατανόηση του:

#include

#include

Περιλαμβάνονται τα απαραίτητα αρχεία κεφαλίδας: για λειτουργίες εισόδου/εξόδου και για χρήση του κοντέινερ 'unordered_map'.

χρησιμοποιώντας το namespace std ;

Ο χώρος ονομάτων 'std' απλοποιεί τον κώδικα. Σας επιτρέπει να χρησιμοποιείτε τα στοιχεία από την τυπική βιβλιοθήκη C++ χωρίς να τα προσθέτετε με το 'std::'.

unordered_map < απανθρακώνω , ενθ > unomp = { { 'Σε' , 9 } , { 'ένα' , 6 } , { 'Π' , 8 } , { 'Μ' , 3 } , { 'μικρό' , 4 } } ;

Δημιουργείται ένας 'unordered_map' με το όνομα 'um' με τους χαρακτήρες ('w', 'a', 'p', 'm', 's') ως κλειδιά και τους αντίστοιχους ακέραιους αριθμούς (9, 6, 8, 3, 4 ) ως αξίες.

αυτο ittr = unomp. εύρημα ( 'Π' ) ;

Η συνάρτηση find() χρησιμοποιείται για την αναζήτηση του στοιχείου με το κλειδί 'p' στο 'unordered_map' που είναι 'unomp'. Ο επαναλήπτης 'ittr' δείχνει το αναγνωρισμένο στοιχείο.

cout << 'Iterator' ' << ittr->πρώτο << ' ' δείχνει σε = ' << ittr -> δεύτερος << endl ;

Το περιεχόμενο στο οποίο επισημαίνεται ο επαναλήπτης εκτυπώνεται στην κονσόλα. Εκτυπώνει το κλειδί (“p”) και τη σχετική τιμή (8) σε αυτήν την περίπτωση.

ΕΠΙΣΤΡΟΦΗ 0 ;

Το πρόγραμμα τερματίζεται, επιστρέφοντας 0 για να υποδείξει την επιτυχή εκτέλεση.

Η έξοδος του κώδικα δίνεται στα παρακάτω για αναφορά σας:

Αυτός ο κώδικας είναι ένα απλό παράδειγμα χρήσης του unordered_map::find() για την αποτελεσματική αναζήτηση και πρόσβαση στα στοιχεία ενός 'unordered_map'. Ο επαναλήπτης παρέχει έναν βολικό τρόπο πρόσβασης τόσο στο κλειδί όσο και στη σχετική τιμή του στοιχείου που βρέθηκε.

Παράδειγμα 2:

Εδώ είναι ένα άλλο απλό παράδειγμα της συνάρτησης unordered_map::find(). Αυτός ο κώδικας δείχνει τη χρήση του 'unordered_map' για την αποθήκευση των Boolean τιμών που σχετίζονται με ακέραια κλειδιά και στη συνέχεια χρησιμοποιεί τη συνάρτηση find() για να ελέγξει την ύπαρξη συγκεκριμένων κλειδιών. Ας δούμε τον παρακάτω κώδικα και στη συνέχεια να καταλάβουμε πώς λειτουργεί:

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( ) {

unordered_map < ενθ , bool > unomp ;

unomp [ 2 ] = αληθής ;

unomp [ 67 ] = ψευδής ;

unomp [ Τέσσερα πέντε ] = αληθής ;

unomp [ 98 ] = ψευδής ;

αν ( unomp. εύρημα ( 67 ) == unomp. τέλος ( ) )

cout << 'Το στοιχείο δεν βρέθηκε' << endl ;

αλλού

cout << 'Το στοιχείο βρέθηκε' << endl ;

αν ( unomp. εύρημα ( 42 ) == unomp. τέλος ( ) )

cout << 'Το στοιχείο δεν βρέθηκε' << endl ;

αλλού

cout << 'Το στοιχείο βρέθηκε' << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Ακολουθεί μια λεπτομερής περιγραφή του κώδικα:

#include

Αυτή η γραμμή περιλαμβάνει ένα αρχείο κεφαλίδας που καλύπτει τις πιο τυπικές βιβλιοθήκες C++ που χρησιμοποιούνται συχνά στον ανταγωνιστικό προγραμματισμό. Ωστόσο, σε μια κανονική ανάπτυξη C++, συνιστάται να συμπεριλάβετε τις συγκεκριμένες κεφαλίδες.

unordered_map < ενθ , bool > unomp ;

Δημιουργείται ένας 'unordered_map' με το όνομα 'unomp' με ακέραια κλειδιά και Boolean τιμές.

unomp [ 2 ] = αληθής ;

unomp [ 67 ] = ψευδής ;

unomp [ Τέσσερα πέντε ] = αληθής ;

unomp [ 98 ] = ψευδής ;

Τα ζεύγη κλειδιών-τιμών εισάγονται στο 'unordered_map'. Κάθε κλειδί (ακέραιος) συσχετίζεται με μια Boolean τιμή.

αν ( unomp. εύρημα ( 67 ) == unomp. τέλος ( ) )

cout << 'Το στοιχείο δεν βρέθηκε' << endl ;

αλλού

cout << 'Το στοιχείο βρέθηκε' << endl ;

Η συνάρτηση find() χρησιμοποιείται στη συνθήκη if-else για αναζήτηση συγκεκριμένων κλειδιών (67 και 42) μέσα στο 'unordered_map'. Εάν βρεθεί το κλειδί, εκτυπώνεται η ένδειξη 'Element found'. Διαφορετικά, εκτυπώνεται 'Το στοιχείο δεν βρέθηκε'. Δείτε την ακόλουθη έξοδο:

Αυτός ο κώδικας παρουσιάζει τη βασική χρήση του 'unordered_map' και της συνάρτησης find() για τον προσδιορισμό της παρουσίας ή απουσίας συγκεκριμένων κλειδιών στον χάρτη.

Παράδειγμα 3:

Ας διερευνήσουμε ένα άλλο παράδειγμα που δείχνει την εύρεση μιας τιμής παρέχοντας μια είσοδο κατά το χρόνο εκτέλεσης. Αυτό το απλό πρόγραμμα χρησιμοποιεί ένα 'unordered_map' για να αποθηκεύσει τα ονόματα (ως κλειδιά) και τις σχετικές αριθμητικές τιμές (σε αυτήν την περίπτωση, που αντιπροσωπεύουν ορισμένα χαρακτηριστικά). Στη συνέχεια, ζητά από τον χρήστη να εισαγάγει ένα όνομα, να αναζητήσει αυτό το όνομα στον χάρτη χρησιμοποιώντας τη συνάρτηση find() και να εκτυπώσει τη σχετική τιμή εάν βρεθεί το όνομα. Ο κωδικός δίνεται στα παρακάτω για αναφορά σας:

#include

#include

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( ) {

std :: unordered_map < std :: σειρά , διπλό > unomp = {

{ 'Χέρυ' , 23 } ,

{ 'Οι υπολοιποι' , 7.4 } ,

{ 'Kalsoom' , 1.2 } } ;

χορδή ποιος ;

cout << 'Ποιον ψάχνετε? ' ;

γραμμή λήψης ( τρώει , ΠΟΥ ) ;

unordered_map < σειρά , διπλό >:: const_iterator βρε = unomp. εύρημα ( ΠΟΥ ) ;

αν ( βρε == unomp. τέλος ( ) )

cout << 'δεν βρέθηκε' ;

αλλού

cout << endl << βρε -> πρώτα << ' είναι ' << βρε -> δεύτερος << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Ακολουθεί η ανάλυση του κώδικα για να κατανοήσετε:

unordered_map < σειρά , διπλό > unomp = { } ;

Δημιουργείται ένας 'unordered_map' με το όνομα 'unomp' με πλήκτρα συμβολοσειράς (ονόματα) και διπλές τιμές.

χορδή ποιος ;

Ο χρήστης καλείται να εισαγάγει ένα όνομα στην οθόνη και η είσοδος αποθηκεύεται στη μεταβλητή συμβολοσειράς 'who'.

unordered_map < σειρά , διπλό >:: const_iterator βρε = unomp. εύρημα ( ΠΟΥ ) ;

Η συνάρτηση find() χρησιμοποιείται για την αναζήτηση του εισαγόμενου ονόματος στο 'unordered_map'. Το αποτέλεσμα αποθηκεύεται στον επαναλήπτη 'fnd'.

αν ( βρε == unomp. τέλος ( ) )

cout << 'δεν βρέθηκε' ;

αλλού

cout << endl << βρε -> πρώτα << ' είναι ' << βρε -> δεύτερος << endl ;

Εάν ο επαναλήπτης 'fnd' φτάσει στο τέλος του 'unordered_map' (end()), σημαίνει ότι το όνομα δεν βρέθηκε και το 'not found' εκτυπώθηκε. Διαφορετικά, εκτυπώνεται το όνομα και η σχετική τιμή. Εδώ είναι η έξοδος του κώδικα:

Αυτός ο κώδικας ουσιαστικά λειτουργεί ως ένα απλό εργαλείο αναζήτησης ονόματος χρησιμοποιώντας ένα 'unordered_map'. Λαμβάνει την είσοδο του χρήστη, αναζητά το όνομα στον χάρτη και παρέχει τη σχετική τιμή εάν βρεθεί το όνομα.

συμπέρασμα

Η συνάρτηση unordered_map::find() στη C++ παρέχει έναν ισχυρό μηχανισμό για τον αποτελεσματικό εντοπισμό των στοιχείων εντός των κοντέινερ 'unordered_map'. Η σταθερή μέση χρονική πολυπλοκότητά του το καθιστά μια προτιμώμενη επιλογή για λειτουργίες αναζήτησης σε σενάρια όπου τα ζεύγη κλειδιών-τιμών πρέπει να έχουν άμεση πρόσβαση. Τα παραδείγματα που παρέχονται δείχνουν την πρακτική χρήση του, τονίζοντας την απλότητα και την αποτελεσματικότητά του. Συμπερασματικά, η γνώση της συνάρτησης unordered_map::find() ενισχύει την ικανότητα ενός προγραμματιστή C++ να εκμεταλλεύεται πλήρως τις δυνατότητες των κοντέινερ 'unordered_map', συμβάλλοντας στη δημιουργία βελτιστοποιημένων και υψηλής απόδοσης εφαρμογών.