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 :

#include <vector> passe pas


Sujet :

C++

  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 393
    Billets dans le blog
    16
    Par défaut #include <vector> passe pas
    Bonjour,

    la compile du fichier recurs.cpp ne passe pas:
    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
    In file included from /usr/include/c++/11/vector:66,
                     from recurs.cpp:3:
    /usr/include/c++/11/bits/stl_uninitialized.h:138:72: error: static assertion failed: result type must be constructible from value type of input range
      138 |       static_assert(is_constructible<_ValueType2, decltype(*__first)>::value,
    /usr/include/c++/11/bits/stl_uninitialized.h:138:72: note: ‘std::integral_constant<bool, false>::value’ evaluates to false
    In file included from /usr/include/c++/11/bits/char_traits.h:39,
                     from /usr/include/c++/11/ios:40,
                     from /usr/include/c++/11/ostream:38,
                     from /usr/include/c++/11/iostream:39,
                     from recurs.cpp:1:
    /usr/include/c++/11/bits/stl_algobase.h:385:25: error: no match foroperator=’ (operand types are ‘std::vector<std::__cxx11::basic_string<char> >’ and ‘std::__cxx11::basic_string<char>’)
      385 |               *__result = *__first;
          |               ~~~~~~~~~~^~~~~~~~~~
    In file included from /usr/include/c++/11/vector:72,
                     from recurs.cpp:3:
    /
    voici le fichier recurs.cpp en entier:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <iostream>
    #include <string>
    #include <vector>
     
     
     
    std::vector<std::vector<std::string>>productionstete(std::string tete,std::vector<std::vector<std::string>>const &grammaire_s);
     
    int main(){
      std::vector<std::vector<std::string>>grammaire_s={
        {"S","A","a"},
        {"S","b"},
        {"A","A","c"},
        {"A","S","d"},
        {"A","epsilon"}
      };
      std::string tetej,tete;
      std::vector<std::string>gamma;
      std::vector<std::vector<std::string>>P;
      for(size_t i=0;i<grammaire_s.size();i++)
        for(size_t j=0;j<i;j++)
          if(grammaire_s[j][0]==grammaire_s[i][1]){
    	tetej=grammaire_s[j][0];
    	P=productionstete(tetej,grammaire_s);
    	gamma=grammaire_s[i];
    	gamma.erase(gamma.begin(),gamma.begin()+2);
    	tete=grammaire_s[i][0];
    	grammaire_s.erase(grammaire_s.begin()+i);
    	for(auto p:P){
    	  p.insert(p.end(),gamma.begin(),gamma.end());
    	  grammaire_s.insert(grammaire_s.begin()+i,p.begin(),p.end());
    	}
          }
      for(auto p:grammaire_s){
        for(auto s:p)
          std::cout<<s<<' ';
        std::cout<<std::endl;
      }
    }
     
    std::vector<std::vector<std::string>>productionstete(std::string tete,std::vector<std::vector<std::string>>const &grammaire_s){
      std::vector<std::vector<std::string>>sortie;
      for(auto p:grammaire_s)
        if(p[0]==tete)
          sortie.push_back(p);
      return sortie;
    }
    quelqu'un a une idée?

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    bonjour je pense que vous vous compliquez inutilement la tâche.
    Mieux vaut utiliser une std::multimap à la place et ça sera bien plus simple à utiliser

  3. #3
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 393
    Billets dans le blog
    16
    Par défaut
    excusez mon ignorance, j'ai essayé ça pour voir ce que sont les multimap.
    unordered pour avoir S->A a | b en premier (il ne faut pas trier) car c'est l'axiome
    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
    #include <iostream>
    #include <string>
    #include <unordered_map>
    #include <vector>
    int main ()
    {
      std::unordered_multimap < std::string,std::vector<std::string> > exemple;
     
      exemple.insert({"S",{"A","a"}});
      exemple.insert({"S",{"b"}});
      exemple.insert({"A",{"A","c"}});
      exemple.insert({"A",{"S","d"}});
      exemple.insert({"A",{"epsilon"}});
      std::cout << "exemple contains:" << std::endl;
      for (auto& x: exemple)
        std::cout << x.exemple << std::endl;
     
      std::cout << std::endl;
      return 0;
    }
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insertunorderedmultimap.cpp: In function ‘int main()’:
    insertunorderedmultimap.cpp:16:20: error: ‘struct std::pair<const std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >’ has no member named ‘exemple’
       16 |     std::cout << x.exemple << std::endl;
    pourrait-on m'expliquer ou me proposer?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Quand tu parcours une collection, chaque élément est un "node" qui contient donc la clef et la valeur. Ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        for ( auto const& [key,vec]  :  exemple ) { // chaque élément est composé de : la string et le vector de string
            std::cout << "clef: " << key << " vecteur: ";
            for ( auto const&  str  :  vec )
                std::cout <<  str << ' ';
            endl( std::cout );
        }

  5. #5
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 393
    Billets dans le blog
    16
    Par défaut
    Merci Dalfab, ça marche
    je m'y suit pris comme ça:
    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
    #include <iostream>
    #include <string>
    #include <unordered_map>
    #include <vector>
    int main (){
      std::unordered_multimap<std::string,std::vector<std::string>>exemple;
     
      exemple.insert({"S",{"A","a"}});
      exemple.insert({"S",{"b"}});
      exemple.insert({"A",{"A","c"}});
      exemple.insert({"A",{"S","d"}});
      exemple.insert({"A",{"epsilon"}});
      std::cout << "exemple contains:" << std::endl;
      for ( auto const& [key,vec]  :  exemple ) { // chaque élément est composé de : la string et le vector de string
        std::cout << key << " ->  ";
        for ( auto const&  str  :  vec )
          std::cout <<  str << ' ';
        endl( std::cout );
      }
    }
    et ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    exemple contains:
    A ->  epsilon 
    A ->  S d 
    A ->  A c 
    S ->  b 
    S ->  A a
    si j'ai d'autres questions, j'ouvrirai une nouvelle discussion

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

Discussions similaires

  1. Tout en utf-8 - passe pas les includes
    Par westernz dans le forum Langage
    Réponses: 4
    Dernier message: 09/04/2017, 19h20
  2. Réponses: 2
    Dernier message: 07/03/2006, 01h53
  3. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12
  4. Envoi de mail [Hotmail : OK ; Wanadoo : Passe pas]
    Par NeoMan dans le forum Réseau
    Réponses: 14
    Dernier message: 28/07/2005, 10h52
  5. Sujet du mailto quine passe pas...
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 15h57

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