Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

Σχετικά έγγραφα
Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δομές Δεδομένων και Αλγόριθμοι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

AVL-trees C++ implementation

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Red-Black Δέντρα. Red-Black Δέντρα

ιαφάνειες παρουσίασης #10 (β)

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Διδάσκων: Παναγιώτης Ανδρέου

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Standard Template Library (STL)

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων Ενότητα 5

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Μάθημα 21: Ουρές (Queues)

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Συγκρίσιμα Αντικείμενα (comparable)

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

Standard Template Library (STL) C++ library

Εκτενείς Δομές Δεδομένων

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων & Αλγόριθμοι

Διάλεξη 18: B-Δένδρα

Φροντιςτήριο. Linked-List

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Διδάσκων: Παναγιώτης Ανδρέου

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

5 ΔΕΝΤΡΑ (Trees) Σχήµα 5.1 : ενδροειδής αναπαράσταση αρχείων στα Windows. έντρα. \ {root directory} Accessories. Program Files.

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

Εργασία 3 Σκελετοί Λύσεων

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

Insert(K,I,S) Delete(K,S)

Εκτενείς Δομές Δεδομένων

Ενότητα 7 Ουρές Προτεραιότητας

Οντοκεντρικός Προγραμματισμός

υαδικό έντρο Αναζήτησης (BSTree)

ΗΥ360 Αρχεία και Βάσεις εδοµένων

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

ιαφάνειες παρουσίασης #11

Προγραμματισμός Υπολογιστών με C++

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

Προγραμματισμός Ι (ΗΥ120)

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Δέντρα

19. ΠΡΟΤΥΠΑ (TEMPLATES)

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

Transcript:

Trees Page 1 Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό (degree) <= 2. Ορισμός: Δυαδικό δένδρο λέγεται ένα δένδρο το οποίο: είναι κενό αποτελείται από μια ρίζα και δύο δυαδικά υπόδενδρα Το βάθος (depth) ενός κόμβου είναι ο αριθμός των ακμών από τον κόμβο μέχρι τη ρίζα. Η ρίζα έχει βάθος 0. Το ύψος (height) ενός κόμβου είναι ο αριθμός των ακμών στο μεγαλύτερο μονοπάτι από τον κόμβο σε ένα φύλλο. Το ύψος (height) ενός δυαδικού δένδρου με n κόμβους μπορεί να είναι το πολύ n-1 και το λιγότερο log(n). Ένα δυαδικό δένδρο είναι γεμάτο (full), αν κάθε κόμβος έχει μηδέν ή δύο απογόνους. Ένα δυαδικό δένδρο είναι τέλειο (perfect), αν είναι γεμάτο και όλα τα φύλλα έχουν το ίδιο βάθος.

Trees Page 2 Αναπαράσταση δένδρων Αφού κάθε κόμβος σε ένα δυαδικό δένδρο έχει το πολύ δύο παιδιά, μπορούμε να κρατούμε δείκτες στο καθένα από αυτά. Δηλαδή, ένας κόμβος μπορεί να υλοποιηθεί ως μια δομή με τρία πεδία. 1.data, όπου αποθηκεύουμε το κλειδί του κόμβου, 2.left, τύπου pointer, το οποίος δείχνει το αριστερό υπόδενδρο 3.right, τύπου pointer, το οποίος δείχνει το δεξιό υπόδενδρο struct node { int data; struct node *left; struct node *right; Δυαδικά Δένδρα Αναζήτησης - ΔΔΑ (Binary Search Trees - BST) Ένα δυαδικό δένδρο αναζήτησης (ΔΔΑ) είναι ένα δυαδικό δένδρο κάθε κόμβος u του οποίου ικανοποιεί τα εξής: 1. τα κλειδιά του αριστερού υποδένδρου του u είναι μικρότερα από το κλειδί του u 2. τα κλειδιά του δεξιού υποδένδρου του u είναι μεγαλύτερα από το κλειδί του u. Παράδειγμα Κτισίματος ενός ΔΔΑ 1. Με τα στοιχεία 50, 60, 40, 30, 20, 45, 65:

Trees Page 3 Με τα στοιχεία: 10, 20, 30, 40, 50: Συνάρτηση εύρεσης τυχαίου στοιχείου (find) Απλή αναδρομική στρατηγική: συγκρίνουμε το στοιχείο που μας ενδιαφέρει α με το στοιχείο της ρίζας του δένδρου β (αν υπάρχει) και: 1.αν α=β, σταματούμε 2.αν α<β, προχωρούμε στο αριστερό υπόδενδρο 3.αν α>β προχωρούμε στο δεξιό υπόδενδρο int find(struct node *node, int target) { if (node == NULL) { return 0; else {

Trees Page 4 if (target == node->data) return 1; else { if (target < node->data) return(find(node->left, target)); else return(find(node->right, target)); Συνάρτηση εισαγωγής νέου κόμβου (Insert) Διασχίζουμε το δέντρο, όπως θα κάναμε με τη find Εάν το X βρεθεί, δεν κάνουμε καμία ενέργεια Διαφορετικά, εισάγουμε το X στο τελευταίο σημείο του μονοπατιού που διασχίστηκε struct node *newnode(int data) { struct node *node = new(struct node); node->data = data; node->left = NULL; node->right = NULL; return node; struct node *insert(struct node *node, int data) { if (node == NULL) { return newnode(data); else { if (data < node->data) node->left = insert(node->left, data); else node->right = insert(node->right, data); return node; Διαγραφή κόμβων (Delete) Παράδειγμα διαγραφής στοιχείου: Α. Διαγραφή του 20 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως ο v είναι ο πατέρας του u. 2. Αν ο u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει στο u, ώστε να γίνει null. Β. Διαγραφή του 60 Αν ο u έχει ένα παιδί, τότε αλλάζουμε τον δείκτη του v που δείχνει τον u, ώστε να δείχνει στο παιδί του u. Γ. Διαγραφή του 50 Αν ο u έχει δύο παιδιά,

Trees Page 5 παιδί του u. Γ. Διαγραφή του 50 Αν ο u έχει δύο παιδιά, αλλάζουμε το κλειδί του u ώστε να γίνει το μεγαλύτερο από τα κλειδιά όλων των απογόνων του που έχουν κλειδιά μικρότερα του i. διαγράφουμε τον κόμβο με το μεγαλύτερο κλειδι στο αριστερό υπόδεντρο του u. Διάσχιση ΔΔΑ Αν θέλουμε να επισκεφθούμε όλους τους κόμβους ενός δένδρου, μπορούμε να χρησιμοποιήσουμε ένα από τους πιο κάτω τρόπους: 1. 2. 3. Προθεματική Διάσχιση: (Preorder Traversal) επισκεπτόμαστε πρώτα κάποιο κόμβο και μετά τα παιδιά του. Μεταθεματική Διάσχιση: (Postorder Traversal) επισκεπτόμαστε πρώτα τα παιδιά και ύστερα τον κόμβο. Ενδοθεματική Διάσχιση: (Inorder Traversal) επισκεπτόμαστε πρώτα τα αριστερά παιδιά, μετά τον κόμβο και μετά τα δεξιά παιδιά. PreOrder: 2 1 4 3 5 PostOrder: 1 3 5 4 2 InOrder: 1 2 3 4 5 Δέντρα στην STL STL - Standard Template Library Ένα σημαντικό πλεονέκτημα της C++ έναντι άλλων γλωσσών είναι ότι παρέχει πλήθος δομικών στοιχείων για ανάπτυξη κώδικα. Αυτά τα στοιχεία συμπεριλαμβάνονται στη βιβλιοθήκη STL. H STL περιέχει τρεις βασικές συνιστώσες: Containers: δομές για αποθήκευση και διαχείριση δεδομένων, υποκατάστατα των πινάκων αλλά με περισσότερες δυνατότητες. Μεταξύ άλλων έχουμε containers που περιλαμβάνουν αυτόματη ταξινόμηση (set, map) ή ταχύτατη ανάκτηση δεδομένων με ακέραιο δείκτη (vector). Iterators: ένα είδος δείκτη για τις θέσεις των στοιχείων ενός container. Έχουν την ίδια μορφή για όλα τα containers. Αλγόριθμους: υλοποιούν τμήματα κώδικα όπως ταξινόμηση, αναζήτηση ή αντικατάσταση στοιχείου. Στην STL δεν υπάρχει container με το όνομα tree. Υπάρχουν όμως τα map και set που δημιουργούν ένα ισοζυγισμένο δέντρο (self-balancing tree) με το όνομα red-black tree που υποστηρίζει αναζήτηση, εισαγωγή και διαγραφή σε χρόνο O(logn) όπου n είναι το συνολικό πλήθος των στοιχείων στο δέντρο.

Trees Page 6 1. set και multiset <set> Αποθηκεύουν τα δεδομένα τους με συγκεκριμένη σειρά και η ταξινόμηση γίνεται αυτόματα. Η βασική τους διαφορά είναι ότι το multiset επιτρέπει περισσότερα από ένα στοιχείο με την ίδια τιμή ενώ το set όχι. Άρα τα στοιχεία στο set είναι μοναδικά. Προσθήκη στοιχείων s.insert(a) Εισάγει το στοιχείο a s.insert(it,a) Εισάγει το στοιχείο a στη θέση του iterator it Διαγραφή στοιχείων s.erase(a) Διαγράφει το στοιχείο a s.erase(it) Διαγράφει το στοιχείο στη θέση του iterator it s.clear() Επιπλέον συναρτήσεις count(a) find(a) lower_bound(a) Διαγράφει όλα τα στοιχεία του s Επιστρέφει το πλήθος των στοιχείων με τιμή a Επιστρέφει iterator στη θέση του στοιχείου a ή αν δεν υπάρχει επιστρέφει end() Επιστρέφει τη θέση του πρώτου στοιχείου που δεν είναι μικρότερο από το a upper_bound(a) Επιστρέφει τη θέση του πρώτου στοιχείου που είναι μεγαλύτερο από το a Παράδειγμα 1: #include <iostream> #include <set> using namespace std; int main(){ char ch; set<char> s; multiset<char> ms; cout << "Please enter a sentence: "; for (;;){ cin.get(ch); if (ch == '\n') break; s.insert(ch); ms.insert(ch); cout << endl << "The set: "; for (set<char>::iterator it = s.begin(); it!= s.end(); it++) cout << *it << ','; cout << endl; cout <<endl<< "The multiset: "; for (multiset<char>::iterator it = ms.begin(); it!= ms.end(); it++) cout << *it << ','; cout << endl; return 0;

Trees Page 7 Input: A babboon blew up a balloon Output: The set:,a,a,b,e,l,n,o,p,u,w, The multiset:,,,,,a,a,a,a,b,b,b,b,b,e,l,l,l,n,n,o,o,o,o,p,u,w, 2. map και multimap (<map> Με τα container map και multimap αποθηκεύουμε ζεύγη στοιχείων στα οποία το πρώτο μέλος (first) έχει το ρόλο του κλειδιού (key) και το δεύτερο μέλος (second) είναι η αντίστοιχη τιμή του. Η βασική διαφορά με το set είναι ότι το map αποθηκεύει κλειδί και τιμή ενώ το set μόνο το κλειδί. Το multimap μπορεί να δεχτεί περισσότερα από ένα ζεύγη με το ίδιο κλειδί ενώ το map δεν επιτρέπει να εισάγουμε κλειδί που ήδη υπάρχει. pair (<utility>) H STL παρέχει containers που αποθηκεύουν ζεύγη στοιχείων, κάτι που θα μας φανεί ιδιαίτερα χρήσιμο με τα map. Το pair μπορεί να περιέχει δύο στοιχεία με διαφορετικούς τύπους και ορίζεται ως εξής: pair<int, double> p1; // p1 == (0, 0.0) pair<int, double> p2(3, 2.0); Η πρόσβαση στα στοιχεία γίνεται ως εξής: pair<int, double> p(3, 2.0); cout << "First: " << p.first << " "<< "Second: " << p.second; Η κατασκευή ενός pair μπορεί να γίνει με τη συνάρτηση make_pair(). pair<int, double> p; p = make_pair(4, 3.0); Πως δημιουργείται το δυαδικό δέντρο αναζήτησης; map<string, int> friends; friends["anne"] = 0; friends["bob"] = 1; friends["chris"] = 2; Παράδειγμα 2:

Trees Page 8 #include <iostream> #include <string> #include <map> #include <utility> using namespace std; int main() { map <string, int> m; m.insert(make_pair("john", 1940)); m.insert(make_pair("paul", 1942)); m.insert(make_pair("nick", 1943)); cout << "John was born in " << m["john"] << endl; // insert new data m["mike"] = 1941; // wrong value, change it m["mike"] = 1940; // print all pairs for (map<string,int>::iterator it = m.begin(); it!= m.end(); ++it) cout << it->first << " was born in "<< it->second << endl; return 0; Παράδειγμα 3: #include <iostream> #include <map> #include <string> using namespace std; int main(){ map<string, string> address; address["andreou"] = "5 Dimitras, Aglatzia"; address["costa"] = "8 Konstantinoupoleos, Geri"; address["damianou"] = "23 Melpomenis, Strovolos"; address["nikolaou"] = "17 Dorieon, Aglatzia"; address["georgiou"] = "6 Salaminos, Strovolos"; address["christou"] = "8 Artemisias, Agios Dometios"; address["menelaou"] = "34 Mnasiadou, Lefkosia"; address["vasiliou"] = "23 Onasagorou, Lemesos"; address["ioannou"] = "11 Lemesou, Lefkosia "; address["michael"] = "12 Athinas, Pafos"; address["zikakis"] = "15 Iras, Larnaka"; for (;;){ cout << "Enter the name of student ('q' to quit): "; string student; getline(cin, student); if (student == "q") break; map<string, string>::iterator it = address.find(student); if (it!= address.end()) cout << "--> " << it->second << endl; else

Trees Page 9 cout << student << " is not a student" << endl; return 0;