Problème déclaration tuple<>

Fermé
DodoFredo - 30 oct. 2020 à 19:00
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 31 oct. 2020 à 16:02
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

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
30 oct. 2020 à 19:09
Bonsoir

pour poster du code dans tes prochains message, merci d'appliquer ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

La déclaration d'un tuple doit contenir entre les <> des types, or dint n'est pas un type.

Et un tuple, c'est pas un tableau.
0
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
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
30 oct. 2020 à 20:44
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
30 oct. 2020 à 22:07
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
31 oct. 2020 à 01:27
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
Merci Dalfab pour votre réponse complète !


Mais je ne peux pas utiliser de structure... Je ne peux que manipuler des objets...
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
31 oct. 2020 à 16:02
Et quelle différence y a-t-il selon toi entre une structure et un objet?
0