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 revisionBoth sides next revision
cpp:stl:containers [2020/05/28 17:04] gthanoscpp:stl:containers [2020/05/28 17:10] – [Αναζήτηση στοιχείου] gthanos
Line 158: Line 158:
 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// που δείχνει στην πρώτη θέση που εμφανίζεται το στοιχείο που αναζητούμε (μπορεί να εμφανίζεται σε περισσότερες θέσεις). Το παρακάτω  παράδειγμα είναι ενδεικτικό.
  
 +<code cpp find_in_vector.cpp>
 +// find example
 +#include <iostream>     // std::cout
 +#include <algorithm>    // std::find
 +#include <vector>       // std::vector
  
 +int main () {
 +  // using std::find with array and pointer:
 +  int myints[] = { 10, 40, 30, 30, 40, 50, 30, 60, 30 };
 +  int *p;
 +  int search_int;
 +  
 +  std::cout << "Enter an integer to search for: ";
 +  std::cin >> search_int;
  
 +  p = std::find (myints, myints+9, search_int);
 +  
 +  if (p != myints+9)
 +    std::cout << "First occurance of " << search_int << " in myints: " << *p << '\n';
 +  else
 +    std::cout << search_int << " not found in myints: " << '\n';
 +
 +  std::vector<int> myvector (myints,myints+9);
 +  auto it = myvector.begin();
 +  bool found = false;
 +  while(true) {
 +    it = find (it , myvector.end(), search_int);
 +    if (it != myvector.end()) {
 +      std::cout << search_int << " found in myvector at pos: " << it - myvector.begin() << '\n';
 +      it++;
 +      found = true;
 +    } else {
 +      if(!found)
 +        std::cout << search_int <<" not found in myvector\n";
 +      break;
 +    }
 +  }
 +
 +  return 0;
 +}
 +</code>
 +
 +=== Αναζήτηση σε associative container και unordered associative container ===
 +
 +Επειδή η συνάρτηση //find// ψάχνει γραμμικά μέσα στο περιεχόμενο του container δεν είναι βέλτιστή για containers που περιγράφονται από δέντρα ή από πίνακα κατακερματισμού. Αυτοί οι //containers// διαθέτουν δικές τους εξειδικευμένες //find// που ταιριάζουν στα χαρακτηριστικά της δομής που εξυπηρετούν. 
 +
 +=== Αναζήτηση σε set ===
 +
 +<code cpp find_in_set.cpp>
 +#include <iostream>
 +#include <set>
 +
 +int main ()
 +{
 +  std::set<int> myset;
 +  std::set<int>::iterator it;
 +
 +  // set some initial values:
 +  for (int i=1; i<=5; i++) myset.insert(i*10);    // set: 10 20 30 40 50
 +
 +  it=myset.find(20);
 +  myset.erase (it);
 +  myset.erase (myset.find(40));
 +
 +  std::cout << "myset contains:";
 +  for (it=myset.begin(); it!=myset.end(); ++it)
 +    std::cout << ' ' << *it;
 +  std::cout << '\n';
 +
 +  return 0;
 +}
 +</code>
 +
 +
 +=== Αναζήτηση σε unordered set ===
    
cpp/stl/containers.txt · Last modified: 2022/05/26 16:49 by gthanos