IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Recherche dans un vecteur


Sujet :

SL & STL C++

  1. #1
    Membre confirmé Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Par défaut Recherche dans un vecteur
    Bonsoir,
    Je réalise en ce moment un petit programme en c++, un Agenda.
    Je stock mes rendez-vous dans un vecteur en faisant ceci:

    vector<RendezVous*>mesRDV; //déclaration de mon vecteur
    RendezVous *monRDV = new RendezVous(jour,mois,annee,heures,minutes,duree,objet);
    mesRDV.push_back(monRDV);

    Ensuite, je cherche à vérifier que lorsque je cré un nouveau rendez-vous, que ce rendez-vous n'est pas déjà pris ( jour,mois,années,heures et minutes similaire au nouveau rendez-vous).

    Le soucis est que je n'arrive pas à dire va chercher dans toute les instances de rendez-vous qui se trouvent dans vecteur, si le jour, le mois,l'année,l'heure et les minutes ne sont pas identiques au paramètres de l'instance que tu viens de créer.

    Si c'est le cas on supprime cette nouvelle instance.

    J'ai bien essayer les fonctions find et search mais sa n'a pas marché ( c'est peut-être moi qui les utilise mal)

    Ce serait sympas si quelqu'un pouvait m'aider.

    Cordialement

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Avec les lgo find() et find_if() :
    http://r0d.developpez.com/articles/algos-stl/#LII-A-3

    Fait un petit code, pour montrer commen tu t'en sert

  3. #3
    Membre confirmé Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Par défaut
    Je l'utilise comme celà:

    if ( find(mesRDV.begin(), mesRDV.end(), jour ) == mesRDV.end() )
    {
    mesRDV.push_back( monRDV );
    }

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par undercrash Voir le message
    Je l'utilise comme celà:

    if ( find(mesRDV.begin(), mesRDV.end(), jour ) == mesRDV.end() )
    {
    mesRDV.push_back( monRDV );
    }
    Cela ne peut pas marcher.
    comment veut tu qu'il compare jour avec des pointeur sur mesRDV??
    Faut que tu face un foncteur

  5. #5
    Membre confirmé Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Par défaut
    ah le probleme doit venir d'ici.
    Je ne sais pas ce qu'est un foncteur.
    Je vais chercher et reposter si je ne parviens pas à faire ce que je veux .

    Cordialement

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    un truc comme
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MonTest
    {
    public :
    MonTest(int jour):m_jour(jour){}
    bool operator ()(RendezVous*momRDV) {return momRDV->jour == m_jour;};
    private :
    int m_jour;
    }
     
     
    find_if(mesRDV.begin(), mesRDV.end(), MonTest(jour) )

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par undercrash Voir le message
    ah le probleme doit venir d'ici.
    Je ne sais pas ce qu'est un foncteur.
    Je vais chercher et reposter si je ne parviens pas à faire ce que je veux .

    Cordialement
    http://r0d.developpez.com/articles/algos-stl/#LI-B

  8. #8
    Membre confirmé Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Par défaut
    merci je vais chercher

  9. #9
    Membre confirmé Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Par défaut
    En fait je ne comprends pas à quoi sert le foncteur.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par undercrash Voir le message
    En fait je ne comprends pas à quoi sert le foncteur.
    En gros cela représente un traitement spécifique que tu veut appliquer a tes élements.
    Ici tu veut tester le jour avec tes rendez vous.
    Seulement RDV == jour n'est pas sensé marcher (sauf si tu as redefinie operator ==). Tu utilise donc un foncteur qui va prendre un RDV en entrer et retourner un bool en fonction de ce que tu veut.

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    voici un exemple avec 3 foncteurs avec find_if
    Demande s'il y as des choses que tu ne comprend pas. Je n'ai qu'une expérience trés théorique des foncteurs. Et ce n'est pas toujours très claire. Mais c'est très puissant couplé avec les algo

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <iostream>
    #include <iterator>
    #include <sstream>
    #include <vector>
    #include <string>
    #include <algorithm>
     
    //class simple de RDV
    class RDV
    {
    public:
        RDV(int jour,int semaine):m_jour(jour),m_semaine(semaine) {}
        const int & GetJour() {return m_jour;};
        const int & GetSemaine() {return m_semaine;};
    private:
        int m_jour;
        int m_semaine;
    };
     
    //foncteur qui va tester le jour
    class MonTestJour
    {
    public :
        explicit MonTestJour(int jour):m_jour(jour){}
     
        bool operator ()(RDV* momRDV) {return momRDV->GetJour() == m_jour;};
    private :
    int m_jour;
    };
     
    //foncteur qui va tester la semaine
    class MonTestSemaine
    {
    public :
        explicit MonTestSemaine(int semaine):m_semaine(semaine){}
     
        bool operator ()(RDV* momRDV) {return momRDV->GetSemaine() == m_semaine;};
    private :
    int m_semaine;
    };
     
    //foncteur qui va tester la semaine et le jour
    class MonTestJourSemaine
    {
    public :
        explicit MonTestJourSemaine(int jour,int semaine):m_jour(jour),m_semaine(semaine){}
     
        bool operator ()(RDV* momRDV) {return (momRDV->GetSemaine() == m_semaine)  && (momRDV->GetJour() == m_jour);};
    private :
    int m_jour;
    int m_semaine;
    };
     
     
    int main(int argc, char **argv)
    {
    	std::vector<RDV *> vect(5);
     
    	vect[0] = new RDV(1,20);
    	vect[1] = new RDV(2,30);
    	vect[2] = new RDV(5,50);
    	vect[3] = new RDV(10,60);
    	vect[4] = new RDV(30,10);
     
    	std::vector<RDV *>::iterator it;
     
    	it =std::find_if(vect.begin(), vect.end(), MonTestJour(5) );
        std::cout<<(*it)->GetJour()<<" "<<(*it)->GetSemaine()<<std::endl;
     
        it =std::find_if(vect.begin(), vect.end(), MonTestSemaine(10) );
        std::cout<<(*it)->GetJour()<<" "<<(*it)->GetSemaine()<<std::endl;
     
        it =std::find_if(vect.begin(), vect.end(), MonTestJourSemaine(2,30) );
        std::cout<<(*it)->GetJour()<<" "<<(*it)->GetSemaine()<<std::endl;
     
     
     
     return 0;
    }

  12. #12
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Personnellement, le "foncteur", moi j'appelle ça un prédicat .

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Personnellement, le "foncteur", moi j'appelle ça un prédicat .
    euh.. ouai peut etre

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    c'est un prédicat sous la forme d'un foncteur. Tous les foncteurs ne sont pas des prédicats.

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    un prédicat est un foncteur qui renvoie un booléen...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Recherche dans des vecteurs et inclusions
    Par abel413 dans le forum MATLAB
    Réponses: 8
    Dernier message: 02/07/2013, 08h55
  2. [Débutant] recherche dans un vecteur
    Par jena dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/09/2012, 13h07
  3. Recherche d ' un nombre dans un vecteur
    Par racoboss dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2008, 19h43
  4. Recherche specifique dans un vecteur
    Par zicos dans le forum MATLAB
    Réponses: 7
    Dernier message: 04/06/2007, 16h58
  5. recherche dans un vecteur
    Par ZaaN dans le forum C++
    Réponses: 2
    Dernier message: 20/12/2005, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo