salut,
est il existe une liste ou map avec 3 (plus que 2) champs.
merci d'avance![]()
salut,
est il existe une liste ou map avec 3 (plus que 2) champs.
merci d'avance![]()
Quand tu regardes la déclaration de std::list, on peut voir la déclaration de la classe template list:La réponse est donc non, et il y a de grandes chances que ce soit pareil pour les autres conteneurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part template < class Type, class allocator=allocator<Type> > class list
Mais comme la plupart de ces conteneurs effectuent des opération de comparaison lors de l'insertion d'éléments, ça paraît logique car le code aura du mal à comparer des types différents...
Reste à faire ton propre conteneur, mais à mon avis, bon courage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct mytype { type1 t1; type2 t2; type3 t3; }; std::list<mytype> mylist;
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Ca fonctionnera pour une list (qui ne fait pas de comparaison sur ses objets) mais pas pour une map (qui fait une comparaison sur ses objets).
Après, j'ai peut être mal compris le problème.
Est-ce une liste avec des emplacements qui contiennent 3 éléments (type1 et type2 et type3) ou une liste avec des emplacements qui peuvent contenir type1 ou type2 ou type3?
et -> tuple
ou -> variant
Bonjour,
Pour une map, il suffit d'ajouter un opérateur de comparaison :
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 template < typename T1, typename T2, typename T3 > struct mytype { T1 t1; T2 t2; T2 t3; bool operator <(const mytype & ref) const { if (t1 == ref.t1) { if (t2 == ref.t2) { return t3 < ref.t3; } else { return t2 < ref.t2; } } else { return t1 < ref.t1; } } }; std::map < mytype < int, int, int >, int >mymap;
Dernière modification par Spout ; 03/09/2008 à 15h42. Motif: Correction de ma bêtise que personne n'a vu (dans la citation)
Partager