| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 
 |  
#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
 
 
struct IndexBloc
{
  string rang;
  string nom;
  string valeur;
};
 
 
// définition d'un objet fonctionnel (function object) qui servira d'argument à find_if
class trouve
{
  string const & s;
  public:
    trouve(string const & ss):s(ss) {}
    bool operator()(IndexBloc const & ib) const { return ib.nom == s; }
};
 
//--------------------------------------------------------------------------
 
int main () 
{ 
  std::vector<IndexBloc> index;
 
  // création de trois structures
  IndexBloc a,b,c;
  // remplissage partiel d'icelles
  a.nom = "Jules";
  a.valeur = "immense";
  b.nom = "Simon";
  c.nom = "Isabelle";
  // remplissage du vecteur
  index.push_back(a);
  index.push_back(b);
  index.push_back(c);
 
  // création d'un itérateur pour le vecteur
  vector<IndexBloc>::const_iterator iter;
 
  //après exécution de la ligne qui suit iter pointe vers la première structure dont
  // le champ nom est "Jules", s'il en existe une
  // sinon iter pointe vers index.end() (la position qui suit le dernier élément du vecteur)
  iter = find_if(index.begin(), index.end(), trouve("Jules"));
 
  // exploitation possible :
  if( iter != index.end())
    cout << "valeur de " <<  (*iter).nom << ": " << (*iter).valeur << endl;
  else
    cout << "Pas de Jules.";
} | 
Partager