User Tools

Site Tools


cpp:stl:containers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
cpp:stl:containers [2020/05/28 17:10] – [Αναζήτηση στοιχείου] gthanoscpp:stl:containers [2020/05/28 17:49] – [Αναζήτηση στοιχείου] gthanos
Line 156: Line 156:
 === Αναζήτηση σε sequence container === === Αναζήτηση σε sequence container ===
  
-H αναζήτηση σε sequence container γίνεται μέσω της συνάρτησης [[http://www.cplusplus.com/reference/algorithm/find/|std::find]]. Όπως θα δείτε και από τον ενδεικτικό κώδικα στο link η συνάρτηση λειτουργεί διατρέχοντας τον //container// με την βοήθεια ενός //iterator// Το κόστος αναζήτησης είναι γραμμικό στο πλήθος των στοιχείων του //container// και για αυτό δεν αποτελεί βέλτιστη επιλογή για //associative// και //unordered associative containers//. Δείτε το παρακάτω ενδεικτικό παράδειγμα αναζήτησης σε μία λίστα. Η συνάρτηση [[http://www.cplusplus.com/reference/algorithm/find/|std::find]] επιστρέφει έναν //iterator// που δείχνει στην πρώτη θέση που εμφανίζεται το στοιχείο που αναζητούμε (μπορεί να εμφανίζεται σε περισσότερες θέσεις). Το παρακάτω  παράδειγμα είναι ενδεικτικό.+H αναζήτηση σε sequence container γίνεται μέσω της συνάρτησης [[http://www.cplusplus.com/reference/algorithm/find/|std::find]]. Όπως θα δείτε και από τον ενδεικτικό κώδικα στο link η συνάρτηση λειτουργεί διατρέχοντας τον //container// με την βοήθεια ενός //iterator// Το κόστος αναζήτησης είναι γραμμικό στο πλήθος των στοιχείων του //container// και για αυτό δεν αποτελεί βέλτιστη επιλογή για //associative// και //unordered associative containers//. Δείτε το παρακάτω ενδεικτικό παράδειγμα αναζήτησης σε μία λίστα. Η συνάρτηση [[http://www.cplusplus.com/reference/algorithm/find/|std::find]] επιστρέφει έναν //iterator// που δείχνει στην πρώτη θέση που εμφανίζεται το στοιχείο που αναζητούμε (μπορεί να εμφανίζεται σε περισσότερες θέσεις). Εάν δεν υπάρχει το στοιχείο που αναζητούμε η συνάρτηση //find// επιστρέφει έναν /iterator// που δείχνει στο σημείο του //container// που δείχνει και η συνάρτηση //end//. Το παρακάτω  παράδειγμα είναι ενδεικτικό.
  
 <code cpp find_in_vector.cpp> <code cpp find_in_vector.cpp>
Line 233: Line 233:
  
 === Αναζήτηση σε unordered set === === Αναζήτηση σε unordered set ===
 +
 +<code cpp find_in_unordered_set.cpp>
 +// unordered_set::find
 +#include <iostream>
 +#include <string>
 +#include <unordered_set>
 +
 +template<typename T>
 +void print_set(std::unordered_set<T>& myset) {
 +  std::cout << "myset contains:";
 +  for (auto it=myset.begin(); it!=myset.end(); ++it)
 +    std::cout << ' ' << *it;
 +  std::cout << '\n';
 +}
 +
 +int main () {
 +  std::unordered_set<std::string> myset;
 +  std::unordered_set<std::string>::iterator it;
 +  char* word[] = { "sugar", "choco", "milk", "banana", "coffee" };
 +
 +  // unordered_set some initial values:
 +  for (int i=0; i<5; i++) 
 +    myset.emplace(word[i]); 
 +  
 +  print_set(myset);
 +  
 +  it=myset.find(std::string("biscuits"));
 +  if(it != myset.end()) {
 +    myset.erase (it);
 +    std::cout << "'buiscuits' erased\n";
 +  }
 +  else 
 +    std::cout << "'buiscuits' not found\n";
 +  
 +  print_set(myset);
 +  myset.erase (myset.find(std::string("milk")));
 +  std::cout << "'milk' erased\n";
 +  print_set(myset);
 +
 +  return 0;
 +}
 +</code>
 +
 +<WRAP important 80% center round>
 +Όλες οι παραλλαγές της συνάρτησης find επιστρέφουν έναν //iterator// που δείχνει στην πρώτη  (ή στη μοναδική) εμφάνιση του στοιχείου που ψάχνουμε στον //container//. Σε περίπτωση που δεν βρεθεί το στοιχείο ο //iterator// δείχνει μετά το τέλος του //container// εκεί που δείχνει και ο //iterator// που επιστρέφεται από τη συνάρτηση //end//.
 +</WRAP>
    
cpp/stl/containers.txt · Last modified: 2022/05/26 16:49 by gthanos