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 :

question sur les "set/list"


Sujet :

C++

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut question sur les "set/list"
    Peut on faire ceci pour nommer un set:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nom=strtok("Le_nom_du_set_est Ensemble," ");
    //en utilisant cette fonction, le nom du set sera Ensemble. 
    set<double>nom;
    //Je désire nommer le set par le string "Ensemble".
    Alors ca ne marche pas du tout. Je ne vois pas pourquoi.
    pourtant, le truc renvoyé par strtok est bien un "char".

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Non.
    Tu obtiendras un fonctionnement similaire avec des "std::map<std::string, tonTypeDeVariable>"
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    oui, mais il n'y aura pas l'unicité des valeur si je prends une map, alors qu'avec un set, il garanti l'unicité des valeurs. (d'apres ce que je sais).


    mais d'apres ce que tu me dis, je ne peux pas faire:

    char a[]="ABC"
    std::set<string>a

    ??

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    s/tonTypeDeVariable/std::set<string>/

    std::map != std::multimap
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    lol,j'ai du mal avec ce genre de langage.

    ma question est simple: peut on avoir une gestion dynamique des sets ?

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Ah ces jeunes qui ne parlent pas le sed...
    s(ubstitute)/toto/titi => remplace toto par titi dans ce que j'ai dit.

    Sinon, tu as confondu map avec multimap relativement à l'unicité des clés. Map <-> table associative, set <-> ensemble


    Soit, comme je l'ai dit, tu ne pas peux définir des variables à la volée. Juste stocker des données et les identifier selon des clés (-> map) ou des indices (-> tableaux)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    en gros, tu peux pas nommer des sets avec des clés.
    tu dois nommer les sets avec des noms que tu as toi meme définis??

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Non. Ce n'est pas ça.

    On ne peut pas nommer des variables C++ en fonction de chaines de caractères déterminées à l'exécution.

    Il y a des contournements à base de tableaux et autres tables associatives, c'est tout.

    Peu importe que tu utilises des std::set ou des Tartampions.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    ok, mais je fais comment moi?

    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
     
     
    int main(){
    set<long>Noms;
    map<char*,set<double> >liste;
    ifstream fichier_in("new.c");
    int i,f,c,n=0;
    char cle;
    double j;
    char XXX[256];
    char b[8];
    while (fichier_in.getline(XXX,sizeof(XXX)));
     f=fonct1(XXX);
         typedef  map<char*,char>nom;
             nom fonct1(XXX);
            for (i=1+f;i<=strlen(XXX);i++){ b[i-(1+f)]=XXX[i];} j=atof(b).....;
    Dans ce code, ca plante quand je fais nom fonct1(XXX) où fonct1 renvoie un char. fonct1(XXX) est donc une variable, qui change a chaque passage de la boucle. Et a chaque passage de la boucle, une nouvelle liste est créee, avec le nom fonct1(XXX).

  10. #10
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    d'allieurs, l'erreur qu'il renvoie est:

    no matching function for call to 'std::map<char*,std::less<char*>,std::allocator<std::pair<char* const,char> >: map(char[256])'

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par deubelte
    ok, mais je fais comment moi?
    Tu lis un livre de C++ ?

    Le C++ n'est pas un langage dynamique. On ne peut pas créer des variable pendant l'exécution de code. On peut juste avoir des structures de données qu'on agrandit dynamiquement.

    Citation Envoyé par deubelte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     f=fonct1(XXX);
         typedef  map<char*,char>nom;
             nom fonct1(XXX);
    Quand tu fais ça, tu indiques au compilateur de créer une nouvelle variable, de type "nom" (c'est à dire map<char*,char>), ayant pour nom "fonct1" (cette variable va donc cacher la fonction fonct1 qui était défini auparavant, tant qu'on ne sortira pas de la portée où cette variable est définie), et initialisée avec la valeur XXX. Comme map<char*,char> n'a pas de constructeur acceptant XXX en paramètre, tu as un message de compilation.

    Si tu veux avoir des ensembles de doubles nommés, le truc à faire est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    map<string,set<double> >liste;
    liste["Nom premier nom"].insert(3.14);
    liste["Nom premier nom"].insert(42);
    liste["Nom deuxième nom"].insert(2.61);
    for (std::set::double::iterator it = liste["Nom premier nom"].begin();
      it != liste["Nom premier nom"].end;
      ++ it)
    {
      cout << *it << " ";
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    oui, c'est ca que je veux faire, mais en l'occurence dans ton cas, tu connais a l'avance le nombre de liste que tu veux définir:
    Il y a en a deux, indexées par Nom premier nom, Nom deuxieme nom.
    mais moi, je ne connais pas le nombre de liste a définir. Donc une boucle s'impose.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pas besoin de le connaître :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    map<string,set<double> >listes;
    bool end;
    do
    {
      string nom;
      cout << "Nom de la liste ('end' pour finir) : "; 
      cin >> nom;
      end = nom == "end";
      if (!end)
      {
        cout << "\nValeur à ajouter : "
        double val;
        cin >> val;
        listes[nom].insert(val);
        cout << endl;
      }
    } while (!end);
     
    for (map<string,set<double> >::iterator it1 = listes.begin();
      it1 != listes.end();
      ++it)
    {
      cout << it1->first << " : ";
      for (set<double>::iterator it2 = it1->second.begin();
        it2 != it1.second.end();
        ++it2)
        {
          cout << *it2 << " ";
        }
        cout << endl;
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Question sur les chargements de list (Lazy Loading?)
    Par Kiruaa dans le forum Android
    Réponses: 4
    Dernier message: 25/06/2013, 11h07
  2. Question sur les allocations de liste
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 3
    Dernier message: 05/12/2011, 11h30
  3. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 11
    Dernier message: 04/01/2007, 20h41
  4. question sur les listes/set/vector
    Par deubelte dans le forum SL & STL
    Réponses: 16
    Dernier message: 28/12/2006, 20h17

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