1 2 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