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 :

question sur les listes/set/vector


Sujet :

SL & STL C++

  1. #1
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut question sur les listes/set/vector
    bonjour,

    j'aimerais utiliser les multimap pour lister dans ces multimap des coordonnées de points suivant des index.
    par exemple, pour la multimap ayant l'index 1, on aurait:
    (1,3),(2,4),(2,5),(4,4)....
    pour la multimap ayant l'index 2 on aurait:
    (2,4),(7,8)......
    et ainsi de suite.

    le problème qui se pose est la déclaration de coordonnées (on peut dire qu'une coordonnée est un tableau a deux éléments) dans la déclaration du multimap:

    typedef multimap<?, ?> listes;


    il est simple de déclarer le premier "?", puisque ce sera un integer, mais que déclarer dans le deuxième ? afin d'insérer (x,y)?
    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Point
    {
        int x;
        int y;
    };
     
    typedef multimap<int, vector<Point> > listes;
    Par contre pourquoi prendre une multimap ? Les clés ont l'air d'être uniques.

  3. #3
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    j'ai pas tellement compris la différence entre vecteur et multimap.

    moi, voici ce que je propose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        typedef multimap<double, double> listes;
        listes m;
     
      double p[2]={0.21 ,0.123};
      m.insert(listes::value_type(1,p[2]));
    je ne sais pas ce qui est optimal entre ta solution et la mienne en terme de temps, et de rigueur du code.

    merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    j'ai pas tellement compris la différence entre vecteur et multimap
    std::vector est un tableau dynamique.
    std::multimap est une table associative dont les clés ne sont pas forcément uniques.
    Ca n'a donc rien à voir
    Regarde la FAQ ou un cours de C++ pour plus de précisions sur les conteneurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef multimap<double, double> listes
    Là tu définis une table qui va associer un double à plusieurs doubles. Toi ce que tu veux, si j'ai bien compris, c'est associer un entier à une tableau de points, ce que j'ai modélisé dans mon exemple.

  5. #5
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    c'est associer un entier à une tableau de points, ce que j'ai modélisé dans mon exemple.

    En fait, je ne veux pas associer un tableau de points a un entier, mais a un double, plus exactement.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En fait, je ne veux pas associer un tableau de points a un entier, mais a un double, plus exactement
    Remplace "int" par "double"

  7. #7
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    ok,
    la, j'ai fait un exemple, mais comment tu rentre le vecteur dans la multimap?
    ca marche pas ce que 'jai fait
    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
     
    struct Point
    {
        double x;
        double y;
    };
     
    int main(){
     
    struct Point poin;
     
      typedef multimap<double, vector<Point> > listes;
        listes m;
     
        poin.x=3;
        poin.y=0.34;
     
     
      m.insert(listes::value_type(0.1,<poin.x,poin.y>));
    }

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    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
    struct Point
    {
        Point(int xx, int yy) : x(xx), y(yy) {}
     
        double x;
        double y;
    };
     
    int main(){
     
        typedef multimap<double, vector<Point> > listes;
        listes m;
     
        vector<Point> v;
        v.push_back(Point(0, -5));
        v.push_back(Point(1, 56));
        v.push_back(Point(2, 24));
     
        listes.insert(make_pair(0.1, v));
     
    }

  9. #9
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    moi, j'ai fait autrement:
    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
     
     
    int main(){
     
     
    std::vector<double> v( 1 );
    typedef multimap<double, vector<double > > listes;
     listes m;
    v[ 0 ]=0.2;
    v[1]=0.4;
    m.insert(listes::value_type(0.1,v ));
     
    listes::iterator P=m.find(0.1);
     cout<<P->first;
       }
    ca marchetres bien puisqu'il affiche : 0.1

    par contre, quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(){
     
     
    std::vector<double> v( 1 );
    typedef multimap<double, vector<double > > listes;
     listes m;
    v[ 0 ]=0.2;
    v[1]=0.4;
    m.insert(listes::value_type(0.1,v ));
     
    listes::iterator P=m.find(0.1);
     cout<<P->second;
       }
    ca plante. Pourquoi?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    moi, j'ai fait autrement
    T'as vraiment quelque chose contre le code que je te propose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef multimap<double, vector<double > > listes;
    Là tu stockes des tableaux de doubles, pas de points.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<double> v( 1 );
    ...
    v[0]=0.2;
    v[1]=0.4;
    Tu donnes une taille de 1 élément à ton tableau, mais tu en initialises 2 ensuite.

  11. #11
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    T'as vraiment quelque chose contre le code que je te propose ?
    pas du toutn, mais en attandant ta réponse, je cherche, et je trouve des trucs qui fonctionne.

    cest bon ca marche, ca affiche 0.4
    mais est-ce bien rigoureux?

    cette portion de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Point
    {
        Point(int xx, int yy) : x(xx), y(yy) {}
     
        double x;
        double y;
    };
    ca m'interesse. ca correspond a quoi et dans quel endroit du cours de Christian C je pourrais le trouver?

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    pas du toutn, mais en attandant ta réponse, je cherche, et je trouve des trucs qui fonctionne
    En général on poste quand on est bloqué, c'est pas sympa pour ceux qui répondent si tu trouves des solutions pendant qu'ils réflechissent à ton problème

    ca m'interesse. ca correspond a quoi et dans quel endroit du cours de Christian C je pourrais le trouver?
    C'est juste une classe (j'ai mis "struct" pour que tout soit publique par défaut, mais c'est pareil) avec deux données membres et un constructeur qui les initialise. Si tu n'es pas familier avec les constructeurs, une petite recherche de ce mot-clé (dans le cours de Christian Casteyde, la FAQ ou autre) te donnera plus de détails.

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

Discussions similaires

  1. Question sur les listes indexées
    Par devplus dans le forum Hibernate
    Réponses: 0
    Dernier message: 25/10/2008, 16h55
  2. questions sur les listes
    Par blaise4714 dans le forum Général Python
    Réponses: 5
    Dernier message: 06/06/2008, 03h40
  3. Question sur les listes d'affichage
    Par brouss dans le forum OpenGL
    Réponses: 3
    Dernier message: 08/03/2007, 12h56
  4. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 16
    Dernier message: 28/12/2006, 20h17
  5. des questions sur les listes chainées
    Par hunter99 dans le forum C
    Réponses: 13
    Dernier message: 05/12/2006, 22h51

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