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

 C++ Discussion :

Utilisation des maps


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Points : 58
    Points
    58
    Par défaut Utilisation des maps
    Mon objectif est d'utiliser les map avec comme clé un tableau IVec3D défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        inline IVec3D(int x, int y, int z) 
          { coord[0] = x; coord[1] = y; coord[2] = z; };
    Je voudrais connaitre les étapes à suivre

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par luffy64 Voir le message
    Mon objectif est d'utiliser les map avec comme clé un tableau IVec3D défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        inline IVec3D(int x, int y, int z) 
          { coord[0] = x; coord[1] = y; coord[2] = z; };
    Ce que je veux récupérer c'est un entier correspondant au numéro du noeud

    Je voudrais connaitre les étapes à suivre

    Merci d'avance
    Pardon , erreur de manipulation

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Il me semble que ta question est incomplète.
    une std::map<Key,Value> est un conteneur associatif qui relie une clé (de type Key) à une valeur (de type Value). Key doit suivre un ordre strict (cf Comment surcharger correctement l'opérateur < ?) soit parce qu'elle supporte un opérateur '<', soit parce que la map est construite avec un foncteur de comparaison dédié.
    Peux tu expliquer plus précisément ton problème ?

  4. #4
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Il me semble que ta question est incomplète.
    une std::map<Key,Value> est un conteneur associatif qui relie une clé (de type Key) à une valeur (de type Value). Key doit suivre un ordre strict (cf Comment surcharger correctement l'opérateur < ?) soit parce qu'elle supporte un opérateur '<', soit parce que la map est construite avec un foncteur de comparaison dédié.
    Peux tu expliquer plus précisément ton problème ?
    Ce que je veux faire c'est associé un tableau contenant les coordonnées d'un noeud au numéro du noeud. En gros quand je donne les coordonnées du noeud, il me renvoie le numéro.

    Le problème est le suivant : je ne sais pas associé à la map une fonction de comparaison.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Un comparateur est juste un foncteur qui prend 2 clés en arguments et retourne vrai ou faux selon le résultat de la comparaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct comp_key
    {
       bool operator()(key const&lhs_, key const&rhs_);
    };
     
    std::map<key,value,comp_key> my_map(/*comp_key()*/);
    Ensuite tu dois définir un ordre strict sur des clés. Tu peux t'inspirer de ce qu'il y a dans la F.A.Q : Comment surcharger correctement l'opérateur < ?. Ce pourrait être quelque chose comme ça (attention, c'est un exemple et peut être pas l'ordre le plus pertinent pour ton problème) :
    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
    36
    37
    38
    39
    #include <iostream>
    #include <map>
     
    struct IVec3D
    {
        int x,y,z;
     
        struct comp {
            bool operator()(IVec3D const &lhs_, IVec3D const &rhs_)
            {
                if(lhs_.x<rhs_.x){
                    return true;
                }
                else
                if(rhs_.x<lhs_.x)
                {
                    return false;
                }
                else{
                    if(lhs_.y<rhs_.y){
                        return true;
                    }
                    else if(rhs_.y<lhs_.y){
                        return false;
                    }
                    else{
                        return lhs_.z<rhs_.z;
                    }
                }
            }
        };
    };
     
    int main()
    {
        std::map<IVec3D,int,IVec3D::comp> mon_map;
     
        return 0;
    }

Discussions similaires

  1. Utiliser une Map pour stocker des informations
    Par sonia5 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 21/09/2011, 14h35
  2. Réponses: 0
    Dernier message: 10/11/2010, 15h10
  3. utiliser drools avec des 'map'
    Par ioda100 dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 21/09/2010, 10h47
  4. De l'utilisation des map et des pair
    Par dedesite dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/11/2007, 22h37
  5. utilisation des std::map
    Par guillaume16 dans le forum SL & STL
    Réponses: 9
    Dernier message: 25/07/2006, 16h56

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