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 :

Parcour d'un vector de set


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Parcour d'un vector de set
    Bonjour,

    J'ai un soucis concernant le parcours d'un vector de set. Je désire insérer dans un tableau 2D deux valeurs si jamais une condition est respectée. Pour cela, je déclare deux variables de type size_t pour parcourir mon tableau 2D ( vu que c'est juste le remplissage d'une ligne si une condition est respectée, je n'ai pas besoin d'iterator). Ces deux variables vont s'incrémenter au fur en a mesure du passage dans la boucle if pour éviter d’écrire sur une ligne déjà remplis.

    Ci-dessous mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef size_t                            format;
    typedef set< etat_t >                  l_format;
    typedef vector< etatset_t >          virtuelle;
     
    Ensuite, dans une structure je déclare :
     
    struct Mat{
     
    virtuelle            virt
    }
    Ensuite, j'ai un fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool Test(Mat& at) {
     
    size_t i_virt=0;
    size_t j_virt=0;
    Ensuite je lit dans mon code un fichier et je rentre deux valeurs dans deux variables 's' et 't' de type format.
    Je réalise après un test, et j'aimerai que si cette condition est vrai, je rentre les valeurs s et t dans le tableau virt. Pour cela, je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (valeur=true){
     
            at.virt[i_virt][j_virt]=(s);
            at.virt[i_virt][j_virt+1]=(t);
            ++i_epsilon;
            j_epsilon=0;
          }
    Lors de la compilation, j'ai cette erreur :
    error: no match for ‘operator[]’ (operand types are ‘std::set<long unsigned int>’ and ‘size_t {aka long unsigned int}’)
    at.virt[i_virt][j_virt]=(s);
    error: no match for ‘operator[]’ (operand types are ‘std::set<long unsigned int>’ and ‘size_t {aka long unsigned int}’)
    at.virt[i_virt][j_virt+1]=(t);

    Quelqu'un aurait une idée d'où vient le problème ? Je pense que c'est mes variables pour parcourir le tableau 2D mais je ne comprend pas pourquoi .. Sinon je suis preneur pour une autre méthode pour inserer les valeurs de s et t dans mon tableau virt 2D.

    Merci d'avance !

    Roate!

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Comme il le dit ton compilateur, un set n'a pas d'operator[].
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par leternel Voir le message
    Comme il le dit ton compilateur, un set n'a pas d'operator[].
    Comme faire alors pour insérer ma valeur dans mon tableau virt ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Roate Voir le message
    Comme faire alors pour insérer ma valeur dans mon tableau virt ?
    http://en.cppreference.com/w/cpp/container/set/insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::set<int> si;
     
    si.insert(42);

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    et pour avoir un tableau de tableau, on utilise un "tableau linéarisé", c'est à dire un tableau de N*M cases.
    Du coup, il devient très très intéressant de réfléchir au problème de [][].

    Regarde donc du coté de notre faq, à la question pourquoi pas [][] et comment bien faire?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Donc je doit concaténer de cette façon :

    at.virt[i_virt],si.insert(s); ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    if (valeur=true){
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Roate Voir le message
    Donc je doit concaténer de cette façon :

    at.virt[i_virt],si.insert(s); ?
    Comment je peux utiliser si.insert(s) avec mon at.virt[i_virt].

    Car je veux que :

    Dans la case 0(colonne)/0(ligne) de virt, il y ai s
    et dans la case 1/0 de virt, il y ai t

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ton probleme est loin d'etre clair, alors pour t'aider..
    Tu pars dans tous les sens, on connait pas la moitie de ce que tu manipules etat_t ? etatset_t ?
    On sait pas ou tu veux en venir avec ton "vector de vector de set", que je ne retrouve nulle part, ni d'ou sortent "s" et "t".
    Un set ca se parcourt, et on verifie qu'il possede une valeur ou non, jamais on lui demande "la premiere case".

    Apres on verra pour ton double vector et tes erreurs de syntaxes (comme celle - peut-etre pas la seule - que j'ai releve dans mon precedent post..)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ton probleme est loin d'etre clair, alors pour t'aider..
    Tu pars dans tous les sens, on connait pas la moitie de ce que tu manipules etat_t ? etatset_t ?
    On sait pas ou tu veux en venir avec ton "vector de vector de set", que je ne retrouve nulle part, ni d'ou sortent "s" et "t".
    Un set ca se parcourt, et on verifie qu'il possede une valeur ou non, jamais on lui demande "la premiere case".

    Apres on verra pour ton double vector et tes erreurs de syntaxes (comme celle - peut-etre pas la seule - que j'ai releve dans mon precedent post..)

    Donc si tu veux, etat_t vaut format et etatset_t vaut l_format, je met suis trompé en compiant mon code désolé.

    Le s et le t correspond a un valeur de type size_t que je récupére en lisant un fichier.

    Enfaite mon virtuelle est déclarer comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef vector< l_format >               virtuelle;
    Après je déclare virt de type virtuelle.

    Je récupère ensuite deux valeurs d'un fichier et je les met dans s et dans t.

    Et je veux, si jamais ma condition est vrai, mettre s et t dans virt. Et c'est la où je bloque, je n'arrive pas a faire ça.

    Tu comprend un peu mieux ce que je veux faire ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bof mais je comprends pas ou tu bloques.

    Tu as std::vector< std::set<int> > vec;;
    Si tu veux ajouter une valeur a un set d'un vector tu as juste a faire vec[validIndex].insert(42);
    Si tu veux verifier qu'une valeur y existe tu fais vec[validIndex].count(42) != 0;;
    En fait a lire la doc qu'on t'a indique plus haut.. http://www.cplusplus.com/reference/set/set/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Parcours d'un vector
    Par CliffeCSTL dans le forum Débuter
    Réponses: 11
    Dernier message: 11/10/2012, 10h44
  2. Parcours d'un vector
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2010, 08h47
  3. Parcours en largeur d'une arborescence->Vector
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 07/12/2006, 22h21
  4. Probleme avec parcours de stl::vector
    Par MDiabolo dans le forum SL & STL
    Réponses: 10
    Dernier message: 08/03/2006, 00h35
  5. [Débutant(e)] Parcours d'un hashtable comme un vector
    Par Arkan dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 12/04/2005, 17h55

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