C++ Std::Map::Erase Examples

C Std Map Erase Examples



Ανάμεσα στις πολλές λειτουργίες που είναι διαθέσιμες για το “std::map”, η συνάρτηση “erase” ξεχωρίζει ως κρίσιμο εργαλείο για την αφαίρεση των στοιχείων με βάση τα κλειδιά τους. Ένα 'std::map' είναι ένα οργανωμένο συσχετιστικό κοντέινερ που αποτελείται από ζεύγη κλειδιού-τιμής. Η διάταξη των στοιχείων μέσα σε ένα 'std::map' ταξινομείται με συνέπεια σύμφωνα με τα κλειδιά τους, διευκολύνοντας τις αποτελεσματικές λειτουργίες όπως αναζήτηση, εισαγωγή και διαγραφή με βάση τις τιμές κλειδιών.

Στο πεδίο της C++, η συνάρτηση 'std::map::erase' χρησιμεύει ως συνάρτηση μέλους της κλάσης 'std::map', επιτρέποντας την εξάλειψη συγκεκριμένων στοιχείων από τον χάρτη. Διατίθεται σε διάφορες μορφές, παρέχοντας ευελιξία στον καθορισμό των στοιχείων που θα διαγραφούν. Σε αυτό το άρθρο, θα εμβαθύνουμε στις λεπτομέρειες του 'std::map::erase', παρέχοντας πολλά παραδείγματα για να δείξουμε την ευελιξία του.







Παράδειγμα 1: Διαγραφή με κλειδί

Η δυνατότητα διαγραφής στοιχείων με κλειδί στο 'std::map' είναι μια θεμελιώδης δυνατότητα που παρέχεται από τη Βιβλιοθήκη προτύπων C++ Standard. Αυτή η λειτουργία χρησιμοποιείται συνήθως όταν χρειάζεται να διαχειριστείτε και να χειριστείτε τα ζεύγη κλειδιών-τιμών σε ένα πρόγραμμα και παρέχει έναν βολικό τρόπο για να αφαιρέσετε τα συγκεκριμένα στοιχεία με βάση τα κλειδιά τους. Θα δημιουργήσουμε ένα παράδειγμα για να δείξουμε πώς να χρησιμοποιήσετε το 'std::map' για να δημιουργήσετε έναν χάρτη, να διαγράψετε ένα στοιχείο-κλειδί και στη συνέχεια να εμφανίσετε τον τροποποιημένο χάρτη.



#include
#include <χάρτης>

int main ( ) {
std:: χάρτης < int, std::string > myMap;
myMap [ 1 ] = 'Το κόκκινο' ;
myMap [ 2 ] = 'Μπλε' ;
myMap [ 3 ] = 'Πράσινος' ;

myMap.ease ( 2 ) ;

Για ( const auto & ζεύγος: myMap ) {
std::cout << ζευγάρι.πρώτον << ':' << ζευγάρι.δεύτερο << std::endl;
}

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


Σε αυτό το παράδειγμα, ξεκινάμε συμπεριλαμβάνοντας τις απαραίτητες τυπικές βιβλιοθήκες C++, όπως και για να ενεργοποιηθεί η χρήση των λειτουργιών εισόδου/εξόδου και του κοντέινερ 'std::map', αντίστοιχα. Μέσα στη συνάρτηση 'main', αρχικοποιούμε το 'std::map' με το όνομα 'myMap' όπου τα ακέραια κλειδιά συνδέονται με τις αντίστοιχες τιμές συμβολοσειράς. Τρία ζεύγη κλειδιών-τιμών προστίθενται στον χάρτη που αντιπροσωπεύουν τα χρώματα: 'Κόκκινο' για το κλειδί 1, 'Μπλε' για το κλειδί 2 και 'Πράσινο' για το κλειδί 3. Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση μέλους 'διαγραφή' του ' κλάση std::map” για να αφαιρέσουμε το στοιχείο που σχετίζεται με το κλειδί 2 από τον χάρτη μας. Κατά συνέπεια, το «Μπλε» χρώμα δεν είναι πλέον μέρος του χάρτη μετά από αυτή τη λειτουργία.



Για να παρουσιάσουμε την προκύπτουσα κατάσταση του χάρτη, χρησιμοποιούμε έναν βρόχο 'για' που επαναλαμβάνεται μέσω κάθε ζεύγους κλειδιού-τιμής στο 'myMap'. Χρησιμοποιούμε το αντικείμενο 'std::cout' μέσα στον βρόχο για να εκτυπώσουμε κάθε ζεύγος κλειδιού-τιμής στην κονσόλα. Τέλος, η δήλωση 'return 0' ολοκληρώνει τη λειτουργία 'main' που σηματοδοτεί την επιτυχή εκτέλεση του προγράμματός μας.





Η έξοδος εμφανίζει τα υπόλοιπα ζεύγη κλειδιού-τιμής στο 'std::map' μετά τη διαγραφή του στοιχείου με το κλειδί 2 ('Μπλε') που έχει ως αποτέλεσμα την έξοδο '1: Κόκκινο' και '3: Πράσινο'.



Παράδειγμα 2: Διαγραφή από Iterator

Στην C++, οι επαναληπτικοί είναι αντικείμενα που διευκολύνουν την πλοήγηση των στοιχείων μέσα σε ένα κοντέινερ, προσφέροντας ένα μέσο πρόσβασης, τροποποίησης ή αφαίρεσης των στοιχείων. Η συνάρτηση 'std::map::erase' μπορεί επίσης να χρησιμοποιηθεί με επαναλήπτες για την αφαίρεση των στοιχείων.

Εδώ είναι ένα παράδειγμα:

#include
#include <χάρτης>

int main ( ) {
std:: χάρτης < int, std::string > fruitFolder;
Φάκελος φρούτων [ 1 ] = 'Μάνγκο' ;
Φάκελος φρούτων [ 2 ] = 'Πορτοκάλι' ;
Φάκελος φρούτων [ 3 ] = 'Ανανάς' ;
Φάκελος φρούτων [ 4 ] = 'σταφύλια' ;

auto it = fruitMap.find ( 2 ) ;

αν ( το ! = fruitMap.end ( ) ) {
fruitMap.ease ( το ) ;
}

Για ( const auto & ζεύγος: fruitMap ) {
std::cout << ζευγάρι.πρώτον << ':' << ζευγάρι.δεύτερο << std::endl;
}

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


Ο παρεχόμενος κώδικας C++ ξεκινά με τη δήλωση ενός 'std::map' με το όνομα 'fruitMap' για την αποθήκευση των ζευγών κλειδιού-τιμής, συσχετίζοντας τους ακέραιους αριθμούς με τα αντίστοιχα ονόματα φρούτων. Συμπληρώνουμε τον χάρτη με καταχωρίσεις για τέσσερα διαφορετικά φρούτα: «Μάνγκο», «Πορτοκάλι», «Πινενάς» και «Σταφύλι». Μετά από αυτό, χρησιμοποιούμε τη συνάρτηση «εύρεση» για να λάβουμε έναν επαναλήπτη (αυτό) που δείχνει στο στοιχείο με την τιμή κλειδιού 2 μέσα στο «fruitMap». Στη συνέχεια, ελέγχουμε αν ο επαναλήπτης δεν είναι ίσος με το 'end()' για να βεβαιωθούμε ότι το στοιχείο με το καθορισμένο κλειδί υπάρχει στον χάρτη.

Στο μπλοκ υπό όρους, διαγράφουμε το στοιχείο στο οποίο υποδεικνύεται ο επαναλήπτης 'it' χρησιμοποιώντας τη συνάρτηση 'erase'. Τέλος, επαναλαμβάνουμε τα υπόλοιπα στοιχεία στον τροποποιημένο 'fruitMap' χρησιμοποιώντας έναν βρόχο 'for'.

Η τελική έξοδος εμφανίζει τα τροποποιημένα περιεχόμενα 'fruitMap' μετά τη διαγραφή.

Παράδειγμα 3: Διαγραφή εύρους

Το κοντέινερ 'std::map' στη C++ παρέχει μια βολική μέθοδο για τη διαγραφή των στοιχείων εντός ενός καθορισμένου εύρους. Η συνάρτηση 'διαγραφή' σάς επιτρέπει να αφαιρέσετε τα στοιχεία από τον χάρτη με βάση επαναλήπτες που αντιπροσωπεύουν την αρχή και το τέλος του εύρους που πρόκειται να διαγραφεί.

Τώρα, ας εξερευνήσουμε την έννοια της διαγραφής ενός εύρους χρησιμοποιώντας το 'std::map' με ένα παράδειγμα:

#include
#include <χάρτης>

int main ( ) {
std:: χάρτης < int, std::string > νέος Χάρτης;
νέος Χάρτης [ 1 ] = 'Αλογο' ;
νέος Χάρτης [ 2 ] = 'Λιοντάρι' ;
νέος Χάρτης [ 3 ] = 'Τίγρη' ;
νέος Χάρτης [ 4 ] = 'Γάτα' ;

newMap.ease ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;

Για ( const auto & ζεύγος: newMap ) {
std::cout << ζευγάρι.πρώτον << ':' << ζευγάρι.δεύτερο << std::endl;
}

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


Το πρόγραμμα ξεκινά δηλώνοντας ένα 'std::map' με το όνομα 'newMap' το οποίο συσχετίζει τα ακέραια κλειδιά με τις αντίστοιχες τιμές συμβολοσειράς. Μετά από αυτό, συμπληρώνουμε τον χάρτη με ζεύγη κλειδιών-τιμών χρησιμοποιώντας τον τελεστή αγκύλων. Για παράδειγμα, εκχωρούμε τα ζεύγη κλειδιού-τιμής των (1, 'Horse'), (2, 'Lion'), (3, 'Tiger') και (4, 'Cat') στο 'newMap'.

Η επόμενη σημαντική λειτουργία περιλαμβάνει τη χρήση των επαναλήψεων για τη διαγραφή των στοιχείων από τον χάρτη. Η συνάρτηση διαγραφής χρησιμοποιείται με τα ορίσματα 'newMap.lower_bound(2)' και 'newMap.upper_bound(3)'. Αυτό διαγράφει τα στοιχεία με τα πλήκτρα που εμπίπτουν στην περιοχή (2, 3). Με άλλα λόγια, αφαιρεί τις εγγραφές «Lion» και «Tiger» από τον χάρτη. Μετά από αυτή τη λειτουργία, ο χάρτης περιέχει μόνο τα στοιχεία με τα πλήκτρα 1 και 4, που αντιστοιχούν σε 'Horse' και 'Cat'.

Τέλος, χρησιμοποιούμε έναν βρόχο «για» που βασίζεται σε εύρος για να επαναλάβουμε τα υπόλοιπα στοιχεία στον χάρτη και να εκτυπώσουμε τα ζεύγη κλειδιού-τιμής τους στην κονσόλα.

Ως αποτέλεσμα, η έξοδος εμφανίζει τα εξής:

Παράδειγμα 4: Διαγραφή με βάση ένα κατηγόρημα

Η διαγραφή με βάση ένα κατηγόρημα αναφέρεται στην αφαίρεση των στοιχείων από μια δομή δεδομένων, όπως ένα κοντέινερ, με βάση μια καθορισμένη συνθήκη ή κριτήρια. Το 'std::map::erase' μπορεί επίσης να χρησιμοποιηθεί με μια συνάρτηση κατηγορήματος για την κατάργηση των στοιχείων υπό όρους. Ας εξετάσουμε το ακόλουθο παράδειγμα:

#include
#include <χάρτης>
#include <αλγόριθμος>

int main ( ) {

std:: χάρτης < int, std::string > myMap = {
{ 1 , 'Ιανουάριος' } ,
{ 2 , 'Φεβρουάριος' } ,
{ 3 , 'Μάρτιος' } ,
{ 4 , 'Απρίλιος' } ,
{ 5 , 'Ενδέχεται' }
} ;

αυτόματο κατηγόρημα = [ ] ( const std::pair < int, std::string >& στοιχείο ) {
ΕΠΙΣΤΡΟΦΗ στοιχείο.δεύτερο.μήκος ( ) < 5 ;
} ;

myMap.ease ( std::remove_if ( myMap.begin ( ) , myMap.end ( ) , κατηγόρημα ) , myMap.end ( ) ) ;

std::cout << ' \n Χάρτης μετά τη διαγραφή στοιχείων με βάση το κατηγόρημα:' << std::endl;
Για ( const auto & ζεύγος: myMap ) {
std::cout << ζευγάρι.πρώτον << ':' << ζευγάρι.δεύτερο << std::endl;
}

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


Το πρόγραμμα ξεκινάει συμπεριλαμβάνοντας τα απαραίτητα αρχεία κεφαλίδας. Ένα 'std::map' που ονομάζεται 'myMap' δηλώνεται και αρχικοποιείται στη συνάρτηση 'main'. Περιέχει τα ζεύγη κλειδιών-τιμών που αντιπροσωπεύουν τα ονόματα των μηνών και τις αντίστοιχες αριθμητικές τους τιμές. Στη συνέχεια, ορίζεται μια συνάρτηση «λάμδα» (κατηγόρημα). Αυτή η συνάρτηση 'λάμδα' χρησιμεύει ως κατηγόρημα για τον αλγόριθμο 'std::remove_if'. Επαληθεύει εάν το μήκος της τιμής συμβολοσειράς που συσχετίζεται με ένα στοιχείο χάρτη είναι μικρότερο από πέντε χαρακτήρες.

Στη συνέχεια, ο αλγόριθμος 'std::remove_if' χρησιμοποιείται σε συνδυασμό με τη συνάρτηση 'erase' του 'std::map'. Αυτός ο συνδυασμός αφαιρεί τα στοιχεία από τον χάρτη με βάση την εγκυρότητα του κατηγορήματος.

Μετά την εκτέλεση του προγράμματος, τα στοιχεία με πλήκτρα μικρότερα από πέντε αφαιρούνται από τον αρχικό χάρτη, επιδεικνύοντας τη διαγραφή με βάση ένα κατηγόρημα χρησιμοποιώντας 'std::map'.

συμπέρασμα

Συμπερασματικά, η συνάρτηση 'std::map::erase' είναι ένα ευέλικτο εργαλείο στη C++ για την αφαίρεση των στοιχείων από το 'std::map'. Είτε γίνεται διαγραφή με κλειδί, επαναλήπτη, εύρος ή βάσει κατηγορήματος, η συνάρτηση 'std::map::erase' παρέχει ευελιξία και ευκολία στη χρήση. Με τον έλεγχο αυτής της λειτουργίας, οι προγραμματιστές της C++ μπορούν να διαχειρίζονται και να χειρίζονται αποτελεσματικά τα δεδομένα εντός των κοντέινερ 'std::map', κάνοντας τον κώδικά τους ισχυρότερο και ευκολότερο στη συντήρηση.