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 :

[débutant] tableau multi dimensionnel


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut [débutant] tableau multi dimensionnel
    Coucou tout le monde,
    je suis désolé de poser cette question qui je pense a déjà été posé mille et une fois, mais ayant beau faire des recherches, je n'arrive pas à trouver un moyen concret de résoudre mon problème, ou alors je ne comprends pas tout ce qui est raconté (voir je n'en vois pas l'utilité), anyway.

    Je cherche à faire un tableau multidimensionnel contenant des pointeurs, quelque chose qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SDL_Surface *surface;
    SDL_Rect *coordonnees;
     
    tableau_associatif["surface"]=surface;
    tableau_associatif["coords"]=coordonnees;
     
    tableauQuiContientTout.push(tableau_associatif);
    Je pensais utiliser std::set et std::vector, mais je n'arrive pas à m'en sortir avec ça.. si quelqu'un peut me montrer un exemple de comment construire mon tableau, ce serait génial, merci !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    'Alut.
    Pour un tableau associatif, tu as les std::map.
    Pour une liste, tu as std::list
    Pour un vecteur, tu as std::vector.

    Toutes ces belles petites choses sont des templates.
    A savoir qu'ils se définissent comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Listes et vecteurs
    std::vector<SDL_Surface*> Vec1;
    std::list<SDL_Rect*> List1;
     
     
    //Tableau associatif
    typedef std::map<int, SDL_Rect*> tMap;
    tMap TableauAssoc1;
    //Exemples d'utilisation
    const int g_COORDS = 1;
    SDL_Rect *coordonnees;
    TableauAssoc1.insert(tMap::value_type(g_COORDS, coordonnees));
    Note qu'un tableau associatif ayant des char* (ou des string) comme clefs n'est pas judicieux. D'où mon utilisation d'un identifiant.

    Par contre pour ton tableauQuiContientTout, je ne vois pas trop ce que tu veux en faire, mais à mon avis, une liste ou un vecteur fera ton affaire.

    Voir la FAQ STL.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    En fait, ce que j'aimerai faire, se présente sous cette forme en PHP/Javascript/etc...

    var elements=new Array();
    elements[0]=new Array();
    elements[0]["surface"]=surface1;
    elements[0]["coords"]=coords1;
    elements[1]=new Array();
    elements[1]["surface"]=surface2;
    elements[1]["coords"]=coords2;
    etc...

    En C++ j'ai réussi à faire quelque chose qui ressemble à ça mais qui ne fonctionne pas complètement (problème dans la boucle) :
    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
     
    //plus haut dans le code, en dehors de ma fonction
    #define SURFACE 1
    #define COORDS  2
     
    //ma fonction main
    std::vector<std::vector<std::pair<int,std::string> > > conteneur;
     
    std::vector<std::pair<int,std::string> > v;
     
    v.push_back(std::make_pair(SURFACE,"ma surface"));
    v.push_back(std::make_pair(COORDS,"mes coords"));
     
    conteneur.push_back(v);
     
    std::vector<std::vector<std::pair<int,std::string> > >::iterator p;
    for(p=conteneur.begin();p!=conteneur.end();p++){
        // je ne sais pas comment afficher mon tableau associatif (surface, coords)
        std::cout<<*p->first<<std::endl; // ne fonctionne pas, erreur à la compilation
    }
    Sauf que d'une, je n'arrive pas à faire en sorte que je puisse insérer un SDL_Surface et un SDL_Rect à la place des strings "ma surface" et "mes coords", j'imagine qu'il faut utiliser les template, mais de quelle manière... :/
    Ensuite, je trouve le code un peu "compliqué" pour juste insérer un "tableau associatif" dans un tableau conteneur, surtout que j'ai pas l'impression que ce soit bon comme ça, car à priori je devrais créer autant de "std::vector<std::pair<std::string,std::string> >" que j'ai de tableau associatif à créer...
    Sinon troisième truc qui m'embête le fait de devoir définir un iterator avec 3 tonnes de "définitions" (std::vector<std::vector<std::pair<std::string,std::string> > >::iterator), j'imagine qu'il y a plus simple.. j'espère.. :o

    Merci pour ta réponse en tout cas

    [Edit] J'ai édité le code, il était pas complet.

    PS : J'ai beau lire la FAQ, je ne dois pas être doué parce-que je n'arrive pas à mon but !

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Sauf que d'une, je n'arrive pas à faire en sorte que je puisse insérer un SDL_Surface et un SDL_Rect à la place des strings "ma surface" et "mes coords", j'imagine qu'il faut utiliser les template, mais de quelle manière... :/
    Euh... ça ne marche pas comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::pair<int, SDL_Surface*>>;


    Sinon troisième truc qui m'embête le fait de devoir définir un iterator avec 3 tonnes de "définitions"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<std::vector<std::pair<int,std::string> > > conteneur;
    std::vector<std::vector<std::pair<int,std::string> > >::iterator p;
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef std::vector<std::vector<std::pair<int,std::string> > > tBigConteneur;
    tBigConteneur conteneur;
    tBigConteneur::iterator p;

    Sinon pour un tableau associatif, tu peux utiliser les std::map (un peu plus simple à l'utilisation).

  5. #5
    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 : 43
    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
    Vu ce qu'il veut faire, je ne suis pas sur qu'une map soit une bonne solution.... Un vector semble bien. Ou peut être une multimap
    Voici une aide pour choisir le contener :
    http://cpp.developpez.com/faq/cpp/?p...hoix_conteneur

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    J'ai déjà été voir cette partie de la FAQ pour choisir le type de conteneur, mais à priori il me faut un vector qui contiendra plusieurs set qui eux contiendront mes 2 pointeurs vers mes SDL_Surface & SDL_Rect, si j'ai bien compris le diagramme.
    A priori le set permet de faire un tableau associatif, si j'interprette bien...

    non ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/02/2007, 10h52
  2. Réponses: 5
    Dernier message: 04/10/2006, 18h49
  3. [Tableaux] Tableau multi dimensionnel
    Par gids01 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2006, 16h18
  4. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 21h23
  5. Réponses: 4
    Dernier message: 24/08/2005, 14h09

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