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 :

remplissage vector de vectort


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par défaut remplissage vector de vectort
    Bonjour je veux transformer une map de map en vector de vector (matrice).

    Ma map de map initiale est sous la forme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    map<string, map<string, int> > maMatrice;
    // Je remplie ma map en itérant sur les deux map!
     
    for(map<string, map<int, int> >::iterator curSP = Dm2rangParEspece.begin(); curSP!= Dm2rangParEspece.end(); ++curSP){
     
                for(map<int, int>::iterator curDM = curSP->second.begin(); curDM!= curSP->second.end(); ++curDM){
     
    //ensuite je fais des opérations d'où valeurAdjacence et FamillesComparees.str().
     
    maMatrice [curSP->first][FamillesComparees.str()] = valeurAdjacence;
    Tout ceci marche plutôt super bien.
    Sauf que dans la suite de ce que je veux faire avoir mes données sous forme de matrice est préférable de l'avoir sous forme de map de map.
    Donc j'ai construit un vector de vector.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     vector<int> matrice;
            vector<matrice> MaMatrice;
    //que je remplie 
     
     matrice.insert (FamillesComparees,FamillesComparees++);
                                              MaMatrice.insert (valeurAdjacence,valeurAdjacence++);
    En fait le but du jeu est d'avoir en ligne les (curSP->first) da ma map de map, en colonne les (FamillesComparees.str()).
    Et dans la matrice pour chaque "FamillesComparees.str()" de "curSP->first" on mets la "valeurAdjacence" correspondant.

    En espérant avoir été clair, je sollicite votre aide encore une fois.
    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Consultant BigData
    Inscrit en
    Juillet 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant BigData

    Informations forums :
    Inscription : Juillet 2009
    Messages : 129
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<int> matrice;
    vector<matrice> MaMatrice;
    Dans la première ligne, tu déclares une variable de type vector.
    Dans la seconde, tu tente de déclarer une variable de type vector<matrice>. Ce qui se trouve entre <> doit être un type et non une variable

    Ensuite, pour clarifier les choses et rendre l'algo de remplissage plus simple à trouver, tu peux utiliser des typedef. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef vector<int> ligne;
    typedef vector<ligne> matrice;
    comme ceci, tu pourras ajouter des int dans des lignes et des lignes dans la matrice. Tu pourras lister les lignes de la matrice et parcourir les éléments des lignes. Tu devrais pouvoir t'en sortir pour établir l'algo je pense.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    tu trouveras ici un bon exemple d'implémentation de matrice. Le code n'est pas parfait, mais il fonctionne, et surtout il illustre bien certains aspects fondamentaux du c++, tels que l'encapsulation, la const-conformité, l'utilisation des opérateurs, etc.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par défaut
    Merci,
    Avec le recule, j'ai vu que le fait de mettre le string1 à la place du string2 dans ma map de map, résolvait entièrement mon problème.

    Je suis aller voir les matrices et c'est assez clair!

    Maintenant je me retrouve à vouloir faire une somme simple avec la fonction accumulate mais bien que mon compilateur ne me renvoie pas d'erreur sur mon main.cpp il me renvoie un message d'erreur sur le stl_numeric.h.

    message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    warning: operation on ‘Adjacence’ may be undefined|
     
    /usr/include/c++/4.4/bits/stl_numeric.h|122|error: invalid type argument of ‘unary *’|
    code :
    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
     
     
    or( map<string, map<string, int> >::iterator it1 = maMatrice.begin(); it1!= maMatrice.end(); ++it1){
     
     
                for(map<string, int>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2){
     
                                int Adjacence = it2-> second ;
                                int SommeValeurAdj = accumulate(  Adjacence ,  Adjacence++ , 0 );
                                cout<< SommeValeurAdj << endl;
     
     
     
                }
     
     
          }
    Merci

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    Je n'ai jamais utilisé accumulate mais son utilisation me semble fausse.

    Tu veux faire quoi au juste ? La somme d'une ligne de la matrice ?

    Soit tu parcours la ligne et tu ajoutes à ton entier, soit tu ne parcours pas et tu demandes à accumulate de le faire.
    Accumulate reçoit un début et une fin, il fait lui même le parcours avec l'opérateur qui itère et n'a donc pas à être dans une boucle. Il faut que l'opérateur qui itère soit défini, d'où ton warning, il veut avancer sur un entier, en fait il ne fait que aller au successeur de l'entier.

    En plus c'est une façon bizarre de coder une matrice, elle peut avoir des lignes plus grandes que les autres ^^

Discussions similaires

  1. Remplissage Vector c++
    Par chercheur111 dans le forum C++
    Réponses: 8
    Dernier message: 18/03/2014, 11h18
  2. Remplissage de DynamicArray par vector
    Par androz dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/06/2009, 22h27
  3. remplissage d'un vecteur de type vector
    Par fatjoe dans le forum C++
    Réponses: 18
    Dernier message: 02/05/2008, 22h08
  4. [Vector] problème de remplissage
    Par Perla_program dans le forum Struts 1
    Réponses: 5
    Dernier message: 03/11/2006, 20h41
  5. Remplissage de vector dans une boucle
    Par anasama dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/01/2006, 09h07

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