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 :

Vecteurs de vecteurs de vecteurs


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Vecteurs de vecteurs de vecteurs
    Salut à tous,
    J'aurai besoin qu'un oeil neuf se penche sur mon problème, parce que je ne comprends vraiment pas d'où il vient...

    Voici quelques structures de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef std::pair<int, bool> activable_node;
    typedef std::vector<activable_node> activable_nuplet;
    typedef std::vector<activable_nuplet> activable_nuplet_pool;
    Et voici un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<activable_nuplet_pool> childs_pools;
    Normalement, childs_pools est un vecteur de vecteur de vecteur de paires.
    Donc childs_pools[i] est un activable_nuplet_pool,
    childs_pools[i][j] un activable_nuplet,
    childs_pools[i][j][k] un activable_node.

    Eh bien non.
    J'apelle cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    childs_pools[i+1][k][y].size()
    Et le compilo me retourne la remarque suivante :

    erreur: ‘struct std::pair<int, bool>’ has no member named ‘size’

    WTF ?

    Quand j'essaie d'utiliser childs_pools[i+1][k][y][b].first, il tire encore plus la tête selon quoi l'opérateur [] n'est pas défini pour les paires.

    Bref, y'a une couille dans le potage, oui, mais où est-elle ?

    Tout ma gratitude à celui qui détecte où ais-je fait mon erreur...

    Merci d'avance,
    El Charpi.

  2. #2
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par El Charpi Voir le message
    typedef std::pair<int, bool> activable_node;
    ...
    childs_pools[i][j][k] un activable_node.
    Je vois pas de problème. child_pools[i][j][k] est bien de type std::pair<> oO !

    [EDIT] Plus clairement : tu appelle 4 fois l'opérateur [] (ou 3 fois puis size). Le résultat est logique.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    A titre personnel, ne me demande si l'alias de type est réellement la meilleure solution...

    Pourquoi ne pas créer des structures ou des classes qui permettraient d'encapsuler correctement les données et de ne fournir que les comportement qui t'intéressent vraiment
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Effectivement un vecteur de vecteurs de vecteurs c'est à mon avis à éviter. Il serait plus simple d'avoir un vecteur à une dimension pour let int et un pour les bool. Tes paires de points seraient alors v1[i] et v2[i]. Utiliser un vecteur à une dimension comme si il y en avait trois n'est pas trop compliqué.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    A vrai dire, je pensais carrément à ne pas utiliser la std::pair, mais plutôt une structure proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct ActivateNode
    {
        int key;
        bool state;
    };
    D'encapsuler un talbeau (ou peut être même plutot un set ) de ActivateNode dans une première classe fournissant les services les plus utiles
    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
    class ActivateNuplet
    {
        public:
            typedef std::vector<ActivateNode>::iterator iterator;
            typedef std::vector<ActivateNode>::const_iterator const_iterator;
            ActivateNuplet(size_t s):tab_(s){}
            void activate(int);
            void deactivate(int);
            void add(int, bool);
            bool isActive(int) const;
            size_t size() const;
            iterator begin(){return tab_.begin();}
            iterator end(){return tab_.end();}
            const_iterator begin() const{return tab_.begin();}
            const_iterator end() const{return tab_.end();}
        private:
            std::vector<ActivateNode> tab_;
    };
    D'encapsuler cette première classe dans une deuxième fournissant les services les plus utiles:
    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
    class ActivateNupletPool
    {
        public:
            void addNuplet(size_t s=0){tab_.push_back(ActivateNuplet(s));}
            typedef std::vector<ActivateNuplet>::iterator iterator;
            typedef std::vector<ActivateNuplet>::const_iterator const_iterator;
            ActivateNuplet(size_t s):tab_(s){}
            void activate(int nup, int node);
            void deactivate(int nup, int node);
            void add(int nup, int node, bool);
            bool isActive(int nup, int node) const;
            size_t size() const;
            iterator begin(){return tab_.begin();}
            iterator end(){return tab_.end();}
            const_iterator begin() const{return tab_.begin();}
            const_iterator end() const{return tab_.end();}
        private:
            std::vector<ActivateNuplet> tab_;
    };
    et ainsi de suite...
    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

Discussions similaires

  1. chercher un vecteur dans un autre vecteur.
    Par etudiante-m dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/01/2013, 12h42
  2. Vecteur de reference ou Vecteur ?
    Par ADBows dans le forum Débuter
    Réponses: 2
    Dernier message: 13/12/2011, 23h40
  3. vecteur de une colonne ->vecteur à 2 colonnes
    Par Orel01 dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/12/2009, 08h35
  4. Nombre d'occurrence d'un vecteur dans un autre vecteur
    Par FstDsi dans le forum Débuter
    Réponses: 1
    Dernier message: 09/08/2009, 16h45
  5. Décomposer un vecteur en 'n' sous vecteurs
    Par Medoou dans le forum MATLAB
    Réponses: 6
    Dernier message: 21/07/2009, 20h35

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