Χάρτης στην τυπική βιβλιοθήκη προτύπων C ++ (STL) με παράδειγμα

Πίνακας περιεχομένων:

Anonim

Τι είναι το std :: map;

Στο C ++, το MAP είναι ένα συσχετισμένο κοντέινερ που αποθηκεύει αντικείμενα σε αντιστοιχισμένη μορφή. Κάθε στοιχείο στο χάρτη αποτελείται από τιμή κλειδιού και αντιστοιχισμένη τιμή. Δύο αντιστοιχισμένες τιμές δεν μπορούν να μοιραστούν τις ίδιες βασικές τιμές.

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

Σε αυτό το σεμινάριο C ++, θα μάθετε:

  • Τι είναι το std :: map;
  • Γιατί να χρησιμοποιήσετε το std :: map;
  • Σύνταξη:
  • Τύποι μελών:
  • Ενσωματωμένες λειτουργίες
  • Επανάληψη στοιχείων στο χάρτη
  • Εισαγωγή δεδομένων στο std :: map:
  • Αναζήτηση σε χάρτη
  • Διαγραφή δεδομένων από έναν χάρτη

Γιατί να χρησιμοποιήσετε το std :: map;

Εδώ είναι οι λόγοι για τη χρήση του χάρτη:

  • std :: map αποθηκεύει μοναδικά κλειδιά μόνο σε ταξινομημένη σειρά βάσει επιλεγμένων κριτηρίων ταξινόμησης.
  • Είναι εύκολο και πιο γρήγορο να αναζητήσετε στοιχεία χρησιμοποιώντας το κλειδί.
  • Μόνο ένα στοιχείο είναι συνδεδεμένο σε κάθε κλειδί.
  • std :: map μπορεί να χρησιμοποιηθεί ως συσχετιστικός πίνακας.
  • std :: map μπορεί να εφαρμοστεί χρησιμοποιώντας δυαδικά δέντρα (ισορροπημένα).

Σύνταξη:

Για να δηλώσετε το std :: map, χρησιμοποιήστε αυτήν τη σύνταξη:

std::mapmap_name;
  • Το key_datatype δηλώνει τον τύπο δεδομένων των κλειδιών χάρτη.
  • Το value_datatype υποδηλώνει τον τύπο δεδομένων των τιμών που αντιστοιχούν στα κλειδιά του χάρτη.
  • Το όνομα_χρήστη είναι το όνομα του χάρτη.

Για παράδειγμα:

map my_map;

Δηλώσαμε έναν χάρτη με το όνομα my_map. Ο χάρτης θα έχει μια συμβολοσειρά ως βασικούς τύπους δεδομένων και ακέραιο ως τιμές τύπων δεδομένων.

Τύποι μελών:

Οι συναρτήσεις μέλους μπορούν να χρησιμοποιήσουν τους ακόλουθους τύπους μελών είτε ως παραμέτρους είτε ως τύπος επιστροφής:

  • key_type: Key (Η πρώτη παράμετρος στο πρότυπο)
  • mapped_type: T (Η δεύτερη παράμετρος στο πρότυπο)
  • key_compare: Σύγκριση (Η τρίτη παράμετρος στο πρότυπο)
  • dialator_type: Alloc (Η τέταρτη παράμετρος στο πρότυπο)
  • value_type: pair
  • value_compare: Ένθετη κλάση λειτουργίας για σύγκριση στοιχείων
  • αναφορά: dialator_type :: αναφορά
  • const_reference: assignator_type :: const_reference
  • δείκτης: dialator_type :: δείκτης
  • const_pointer: assignator_type :: const_pointer
  • iterator: ένας αμφίδρομος επαναληπτής στον τύπο_τιμής
  • const_iterator: ένας αμφίδρομος επαναληπτής στον τύπο const_τιμής
  • reverse_iterator: αντίστροφος επαναληπτής
  • const_reverse_iterator: ένας σταθερός αντίστροφος επαναληπτής
  • difference_type: ptrdiff_t
  • size_type: size_t

Ενσωματωμένες λειτουργίες

std :: map συνοδεύεται από ενσωματωμένες λειτουργίες. Μερικά από αυτά περιλαμβάνουν:

  • begin () - Αυτή η συνάρτηση επιστρέφει τον επαναληπτή στο πρώτο στοιχείο του χάρτη.
  • size () - Αυτή η συνάρτηση επιστρέφει τον αριθμό των αντικειμένων σε έναν χάρτη.
  • κενό () - Αυτή η συνάρτηση επιστρέφει μια τιμή Boolean που δηλώνει εάν ένας χάρτης είναι κενός.
  • insert (pair (key, value)) - Αυτή η συνάρτηση εισάγει νέο ζεύγος κλειδιού-τιμής σε έναν χάρτη.
  • find (val) - Αυτή η συνάρτηση δίνει στον επαναληπτή το στοιχείο val εάν βρεθεί. Διαφορετικά, θα επιστρέψει m.end ().
  • Διαγραφή (θέση επαναληπτικού) - Αυτή η λειτουργία διαγράφει το στοιχείο στη θέση που υποδεικνύεται από τον επαναληπτή.
  • erase (const g) - Αυτή η λειτουργία διαγράφει το κλειδί-τιμή g από έναν χάρτη.
  • Clear () - Αυτή η λειτουργία διαγράφει όλα τα στοιχεία από έναν χάρτη.

Επανάληψη στοιχείων στο χάρτη

Μπορείτε να επαναλάβετε τα στοιχεία του χάρτη. Πρέπει απλώς να δημιουργήσουμε έναν επαναληπτικό και να το χρησιμοποιήσουμε για αυτό. Για παράδειγμα:

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

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  2. Συμπεριλάβετε το αρχείο κεφαλίδας συμβολοσειράς στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  3. Συμπεριλάβετε το αρχείο κεφαλίδας χάρτη στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  4. Συμπεριλάβετε το χώρο ονομάτων std στον κώδικα μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  5. Καλέστε την κύρια λειτουργία (). Το {σηματοδοτεί την αρχή του σώματος της συνάρτησης.
  6. Δημιουργήστε έναν χάρτη με όνομα μαθητές όπου τα κλειδιά θα είναι ακέραιοι και οι τιμές θα είναι συμβολοσειρές.
  7. Εισαγάγετε τιμές στο χάρτη Φοιτητές. Ένα κλειδί 200 και μια τιμή της Αλίκη θα εισαχθεί στον χάρτη.
  8. Εισαγάγετε τιμές στο χάρτη Φοιτητές. Στο χάρτη θα εισαχθεί ένα κλειδί 201 και μια τιμή του John.
  9. Χρησιμοποιήστε τη συνάρτηση size () για να λάβετε το μέγεθος του χάρτη που ονομάζεται Student. Αυτό θα πρέπει να επιστρέψει ένα 2.
  10. Εκτυπώστε λίγο κείμενο στην κονσόλα.
  11. Χρησιμοποιήστε ένα βρόχο για να δημιουργήσετε έναν επαναληπτή που το ονομάζει για να επαναλάβει τα στοιχεία του χάρτη που ονομάζεται Φοιτητές.
  12. Εκτυπώστε τις τιμές του χάρτη μαθητές στην κονσόλα.
  13. Άκρο του σώματος του βρόχου για.
  14. Τέλος του σώματος της κύριας () συνάρτησης.

Εισαγωγή δεδομένων στο std :: map

Μπορείτε να εισαγάγετε στοιχεία στο std :: map χρησιμοποιώντας τη συνάρτηση insert (). Θυμηθείτε ότι τα κλειδιά std :: map πρέπει να είναι μοναδικά.

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

Η συνάρτηση έχει τις ακόλουθες παραλλαγές:

  • insert (pair) - με αυτήν την παραλλαγή, ένα ζεύγος κλειδιού-τιμής εισάγεται στο χάρτη.
  • insert (start_itr, end_itr) - με αυτήν την παραλλαγή, οι εγγραφές θα εισαχθούν εντός του εύρους που ορίζεται από το start_itr και το end_itr από άλλο χάρτη.

Η συνάρτηση insert_or_assing () λειτουργεί με τον ίδιο τρόπο όπως η συνάρτηση insert (), αλλά εάν το δεδομένο κλειδί υπάρχει ήδη στο χάρτη, η τιμή του θα τροποποιηθεί.

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

#include #include using namespace std;int main() {map m{ {1,3} , {2,4} , {3,5} };m.insert({ 5, 6 });m.insert({ 1, 8 });m.insert_or_assign(1, 6);cout << "Key\tElement\n";for (auto itr = m.begin(); itr != m.end(); ++itr) {cout << itr->first << '\t' << itr->second << '\n';}return 0;}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας χάρτη στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  2. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  3. Συμπεριλάβετε το χώρο ονομάτων std στον κώδικα μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  4. Καλέστε την κύρια λειτουργία (). Το {σηματοδοτεί την αρχή του σώματος της συνάρτησης.
  5. Δημιουργήστε έναν χάρτη με το όνομα m όπου τα κλειδιά θα είναι ακέραιοι και οι τιμές θα είναι ακέραιοι. Έχουν γίνει τρεις καταχωρήσεις στον χάρτη.
  6. Εισαγάγετε μια νέα καταχώρηση στο χάρτη m. Στο χάρτη θα εισαχθεί ένα κλειδί 5 και μια τιμή 6.
  7. Προσπαθώντας να κάνετε μια καταχώριση σε ένα ήδη υπάρχον κλειδί. Δεδομένου ότι το κλειδί 1 υπάρχει ήδη στο χάρτη, η καταχώριση δεν θα πραγματοποιηθεί.
  8. Χρήση της συνάρτησης insert_or_assign () για εισαγωγή ή τροποποίηση μιας υπάρχουσας καταχώρισης. Δεδομένου ότι το κλειδί 1 υπάρχει ήδη, η τιμή του θα αλλάξει σε 6.
  9. Εκτυπώστε λίγο κείμενο στην κονσόλα. Ο χαρακτήρας "\ t" δημιουργεί ένα οριζόντιο διάστημα ενώ ο χαρακτήρας "\ n" μετακινεί τον κέρσορα του ποντικιού στην επόμενη γραμμή.
  10. Χρησιμοποιήστε ένα βρόχο για να δημιουργήσετε έναν επαναληπτικό που ονομάζεται itr για να επαναλάβετε τα στοιχεία του χάρτη που ονομάζεται m.
  11. Εκτυπώστε τις τιμές του χάρτη m στην κονσόλα. Ο χαρακτήρας "\ t" δημιουργεί ένα οριζόντιο κενό ανάμεσα σε κάθε πλήκτρο και την αντίστοιχη τιμή του. Αντίθετα, ο χαρακτήρας "\ n" μετακινεί τον κέρσορα του ποντικιού στην επόμενη γραμμή μετά από κάθε επανάληψη.
  12. Τέλος του σώματος του βρόχου.
  13. Το πρόγραμμα πρέπει να επιστρέψει την τιμή μετά την επιτυχή ολοκλήρωση.
  14. Τέλος του σώματος της κύριας () συνάρτησης.

Αναζήτηση σε χάρτη

Μπορούμε να χρησιμοποιήσουμε τη λειτουργία εύρεσης () για να αναζητήσουμε στοιχεία σε έναν χάρτη με τα κλειδιά τους. Εάν το κλειδί δεν βρεθεί, η συνάρτηση επιστρέφει std :: map :: end. Διαφορετικά, θα επιστραφεί ένας επαναληπτικός παράγοντας του στοιχείου που αναζητήθηκε.

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

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::iterator it = Students.find(201);if (it != Students.end()) {std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';}}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του χωρίς να λάβετε σφάλματα.
  2. Συμπεριλάβετε το αρχείο κεφαλίδας συμβολοσειράς στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του χωρίς να λάβετε σφάλματα.
  3. Συμπεριλάβετε το αρχείο κεφαλίδας χάρτη στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του χωρίς να λάβετε σφάλματα.
  4. Συμπεριλάβετε το χώρο ονομάτων std στον κώδικα μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  5. Καλέστε την κύρια λειτουργία (). Το {σηματοδοτεί την αρχή του σώματος της κύριας συνάρτησης ().
  6. Δημιουργήστε έναν χάρτη με όνομα μαθητές, των οποίων τα κλειδιά θα είναι ακέραιοι και συμβολοσειρές τιμών.
  7. Εισαγάγετε τιμές στο χάρτη Φοιτητές. Ένα κλειδί 200 και μια τιμή της Αλίκη θα εισαχθεί στον χάρτη.
  8. Εισαγάγετε τιμές στο χάρτη Φοιτητές. Στο χάρτη θα εισαχθεί ένα κλειδί 201 και μια τιμή του John.
  9. Αναζητήστε την τιμή που σχετίζεται με ένα κλειδί του 201.
  10. Χρησιμοποιήστε μια δήλωση if για να ελέγξετε αν βρίσκεται η τιμή για το κλειδί.
  11. Εκτυπώστε την τιμή του κλειδιού μαζί με κάποιο κείμενο στην κονσόλα.
  12. Τέλος του κυρίως σώματος της δήλωσης if.
  13. Τέλος του σώματος της κύριας () συνάρτησης.

Διαγραφή δεδομένων από έναν χάρτη

Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση erase () για να διαγράψουμε μια τιμή από έναν χάρτη. Δημιουργούμε απλώς έναν επαναληπτικό που δείχνει το στοιχείο που πρέπει να διαγραφεί. Στη συνέχεια, ο επαναληπτής μεταφέρεται στη συνάρτηση erase ().

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

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  2. Συμπεριλάβετε το αρχείο κεφαλίδας συμβολοσειράς στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  3. Συμπεριλάβετε το αρχείο κεφαλίδας χάρτη στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  4. Συμπεριλάβετε το χώρο ονομάτων std στον κώδικα μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  5. Καλέστε την κύρια λειτουργία (). Το {σηματοδοτεί την αρχή του σώματος της κύριας συνάρτησης ().
  6. Δημιουργήστε έναν χάρτη με το όνομα my_map του οποίου τα κλειδιά θα είναι συμβολοσειρές και ακέραιοι τιμές.
  7. Εισαγάγετε τιμές στο χάρτη my_map. Στο χάρτη θα εισαχθεί ένα κλειδί αγελάδας και μια τιμή 1.
  8. Εισαγάγετε τιμές στο χάρτη my_map. Στο χάρτη θα εισαχθεί ένα κλειδί Cat και μια τιμή 2.
  9. Προσθέστε μια τιμή 3 στο χάρτη my_map με ένα πλήκτρο λιονταριού.
  10. Δημιουργήστε έναν επαναληπτικό για να επαναλάβετε τον χάρτη my_map αναζητώντας τη βασική γάτα.
  11. Διαγράψτε το στοιχείο που επισημαίνεται από τον επαναληπτή.
  12. Χρησιμοποιήστε έναν επαναληπτικό για να επαναλάβετε τα στοιχεία του χάρτη my_map από την αρχή έως το τέλος.
  13. Εκτυπώστε τα περιεχόμενα του χάρτη my_map στην κονσόλα.
  14. Το πρόγραμμα πρέπει να επιστρέψει την έξοδο μετά την επιτυχή ολοκλήρωση.
  15. Τέλος του σώματος της κύριας () συνάρτησης.

Περίληψη:

  • Ο χάρτης είναι ένα συσχετιστικό κοντέινερ που αποθηκεύει αντικείμενα σε αντιστοιχισμένη μορφή.
  • Κάθε στοιχείο στο χάρτη έχει μια τιμή κλειδιού και μια αντιστοιχισμένη τιμή.
  • Σε ένα χάρτη, δύο αντιστοιχισμένες τιμές δεν μπορούν να μοιραστούν βασικές τιμές.
  • Οι βασικές τιμές βοηθούν στην ταξινόμηση και τον προσδιορισμό στοιχείων μοναδικά.
  • Οι αντιστοιχισμένες τιμές βοηθούν στην αποθήκευση περιεχομένου που σχετίζεται με το κλειδί.
  • Ο χάρτης C ++ αποθηκεύει μοναδικά κλειδιά σε ταξινομημένη σειρά.
  • Για να δουλέψουμε με το χάρτη C ++, δημιουργούμε έναν επαναληπτικό για να επαναλάβουμε τα στοιχεία.
  • Με τον επαναληπτή, μπορούμε να εκτελέσουμε εργασίες όπως αναζήτηση και διαγραφή στοιχείων από το χάρτη.