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 :

utilisation map et struct


Sujet :

SL & STL C++

Vue hybride

senshi03 utilisation map et struct 31/10/2007, 23h34
koala01 Salut, et bienvenue sur le... 01/11/2007, 02h54
senshi03 Merci des renseignements ... 01/11/2007, 18h56
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut utilisation map et struct
    j'essaye d'acceder à un element de ma struct de ma map <string, struct>
    ayant une methode de recherche qui est identique pour tout les champ de ma structure je voulais faire une methode ou je passe en argument le champ et l'element à rechercher dans le champ.
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void recherche( string champ,string rech,  map <string,struct personne> & annu)
    {
    	map<string,struct personne> ::iterator it;
    	for (it=annu.begin();it!=annu.end();it++) {
    		if(annu[it->first].champ == rech)
    		      //affiche la structure
    		}
     
    }
    le probleme est que l'element "(annu[it->first].champ " il ne l'accepte pas car "champ" n'est pas un type de ma struct.
    Merci de me dire comment faire pour pouvoir faire cette methode...

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut, et bienvenue sur le forum

    Ton code n'est tout simplement pas correct...

    En gros:
    • les mots clés union, enum, struct et class provoquent automatiquement la création d'un type associé au nom donné... il est donc tout à fait inutile de préciser le mot clé struct quand tu veux indiquer que tu fournis... une structure du type "Personne" en paramètre
    • On ne peut pas utiliser une chaine de caractère qui contiendrait le nom d'un champs de structure pour indiquer quel champ on veut tester...

      Cela peut cependant être contourné en fournissant plutot une valeur numérique et en placant la recherche dans un test à choix multiple du genre de
      Code : 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
      void Recherche(size_t numchamp, const std::string& val, std::map<std::string, Persone>& lamap)
      {
          std::map<std::string, Personne>::iterator it=lamap.begin();
          bool found=false;
          while(!found && it!=lamap.end())
          {
              switch(numchamp)
              {
                  case 1:
                      if((*it).second.le_champs_1==ch)
                          found=true;
                      break;
                  case 2:
                      if((*it).second.le_champs_2==ch)
                          found=true;
                      break;
                  case 3:
                      if((*it).second.le_champs_3==ch)
                          found=true;
                      break;
                  /* ...*/
                  default:
                      it++;
              }
          }
          if(it!=lamap.end())
          {
              /* on a trouvé l'élément qu'on cherchait :D:D */
          }
          /* éventuellement*/
          else
          {
              std::cout<<"impossible de trouver l'element recherche"<<std::endl;
          }
      }
    • la std::map est particulièrement adaptée à la recherche des éléments quand on effectue la recherche sur la clé qui sert à l'indexation:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      void Cherche(const std::string& searchedkey, std::map<std::string, Persone>& lamap)
      {
          std::map<std::string, Persone>::iterator it=lamap.find(searchedkey);
          if(it!= lamap.end())
          {
              /*Youppeee, on a trouve l'element */
          }
          /* éventuellement*/
          else
          {
              std::cout<<"impossible de trouver l'element recherche"<<std::endl;
          }
      }
      Mais il faut éviter d'avoir recours à l'opérateur [], et, surtout, si c'est pour utiliser quelque chose du genre de [(*it).first], qui ne ressemble strictement à rien
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Merci des renseignements

    sympa

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

Discussions similaires

  1. [Débutant] Comment utiliser Map scale.
    Par solaar dans le forum C#
    Réponses: 0
    Dernier message: 08/03/2013, 11h37
  2. utiliser Map<Object, Map<String, Object>>
    Par router_ dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/07/2010, 09h44
  3. utilisation map et pointeur
    Par Jahjouh dans le forum SL & STL
    Réponses: 4
    Dernier message: 31/10/2007, 22h44
  4. Quel format de fichier utiliser pour les maps ?
    Par fb57 dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/09/2004, 20h22

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