Problème déclaration tuple<>

Bonjour à tous,

Je suis débutant en C++ et j'ai un problème pour déclarer des tableaux...
Mes déclarations sont les suivantes:

std::set<char> ch;
std::tuple<int,int> dint;

std::tuple< ch,dint,dint> tab;

Cette dernière ligne pose problème...
Mon compilateur ne comprends mon code... Et je ne comprends pas mon erreur...
Est ce que quelqu'un pourrait m'aider ?

Bonne soirée

8 réponses

  1. Bonsoir,

    Merci de votre répons.

    Est ce qu'il est possible en C++ de faire un tableau de tuple ?

    Pour accueillir un int puis un char puis un int ?

    Par exemple :

    std:set<std::tuple< int,char,int>> tab; 
    0
    1. je code assez peu (et mal) en C++, mais pour
      Pour accueillir un int puis un char puis un int ?
      il ne me semble pas opportun de faire un tableau de tuple ou un tuple de tuple.

      C'est le rôle d'un tuple que d'accueillir différents type

      std::tuple<int,char, int> monTuple;

      0
      1. Bonjour,

        Il faudrait peut-être que tu précises ton besoin car les tuples c'est fait pour des traitements intermédiaires anonymes. Si tu sais ce que tu vas mettre dedans (par exemple
        int
        ,
        char
        et
        int
        ), alors tu n'as certainement pas besoin d'un tuple. Tu devrais utiliser une structure.

        Est-ce que qu'on peut faire un tableau de tuple? Oui. Et il existe plein de possibilités. exemple :
        std::vector<std::tuple<int,char,int>>
        est bien un tableau de n-uplets. Mais ai-je bien compris? Où t'es tu bien exprimé?

        Voilà un tuple initialisé (ça n'est pas un tableau, c'est un n-uplet) :
        std::tuple<int,char,int>  un_n_uplet = std::make_tuple( 1, '2', 3 );


        Dans l'exemple que tu donnes
        std::set<std::tuple<int,char,int>> tab;
        , tu veux mettre un n-uplet dans un ensemble. Ça n'a pas de sens car un ensemble ça contient des éléments qui sont uniques et ordonnés, or on ne peut normalement pas ordonner des tuples (est-ce que le n-uplet {1,'a',7} est plus grand que le n-uplet {1,'x',2} ?)

        Pourquoi veux tu des
        std::tuple<>
        ?
        Pourquoi veux tu des
        std::set<>
        ?
        Pourquoi veux tu des tableaux?
        0
        1. Bonsoir,

          Merci pour vos réponses !
          Mon problème est :

          Je dois aller d'un point A à un point B par une route C
          Les points sont matérialisé par un entier (int) et le chemin par une lettre (char)

          Donc pour ca, j'ai créer :
          - un tableau set pour les routes, qui n'a pas besoin d'organisation/d'indice
          - un tableau de point qui est caractérisé par son nom (entier) et d'autres caractéristiques (int)

          Et le tableau que je n'arrive pas a créer et le tableau qui caractérise un 'chemin' d'un point A à un point B par une route C

          Et j'ai donc pensé à faire un tableau de <int,char,int> mais je n'arrive pas à le faire...
          0
          1. set
            n'est pas un tableau c'est un ensemble.
            et pour grouper un point, une route et un point, il faut une structure comme ça ils auront un nom, c'est bien mieux qu'un tuple.
            #include <vector>
            #include <algorithm>
            
            struct Chemin {
                int  debut;
                char  route;
                int  fin;
            };
            
            std::vector<Chemin>  creerLesChemins(){
               std::vector<Chemin>  tousLesChemins;
               tousLesChemins.push_back( {1,'x',2} );  // ajout de la route 'x' qui mène de 1 à 2.
               tousLesChemins.push_back( {3,'y',4} );  // ajout de la route 'y' qui mène de 3 à 4.
               return  tousLesChemins;
            }
            
            std::vector<Chemin>  trouverLesCheminsPartantDe(std::vector<Chemin>const& lesChemins, int deb) {
                std::vector<Chemin>  res;
                std::copy_if( lesChemins.begin(), lesChemins.end(),
                        std::back_inserter(res) ,
                        [deb](auto& chm){return deb==chm.debut;} );
                return  res;
            }
            0
            1. Merci Dalfab pour votre réponse complète !

              Mais je ne peux pas utiliser de structure... Je ne peux que manipuler des objets...
              0
              1. Et quelle différence y a-t-il selon toi entre une structure et un objet?
                0