Bonjour,
Dans mon programme, j'ai une grille 3D. Chacune des ses cases (cubes) est repérée par un trio <i,j,k>. Existe-t-il un objet équivalent à std::pair mais gérant trois indexes au lieu de deux, svp?
Cordialement,
Rodrigue
Version imprimable
Bonjour,
Dans mon programme, j'ai une grille 3D. Chacune des ses cases (cubes) est repérée par un trio <i,j,k>. Existe-t-il un objet équivalent à std::pair mais gérant trois indexes au lieu de deux, svp?
Cordialement,
Rodrigue
Il y a bien boost::tuple, mais je pense que pour ce genre de choses, un struct coor {int i, int j, int k}; et plutôt plus simple...
tu peux aussi créer ton propre type,
ensuite, tu peux écrire ton propre "make_triplet" si tu veuxCode:
1
2
3
4
5
6 template< typename First, typename Second, typename Third > struct triplet { typedef First first; typedef Second second; typedef Third third; };
Tout dépend de ce que tu veux en faire. Si tu veux utiliser un itérateur, ça va pas être pratique une struct :roll:
Ne réinvente pas la roue. Utilise boost::tuple, qui pourrait bien devenir une partie du standard C++...Citation:
Il y a bien boost::tuple, mais je pense que pour ce genre de choses, un struct coor {int i, int j, int k}; et plutôt plus simple...
Que boost::tuple fasse probablement partie du prochain standard, oui.
Qu'il ne faille pas réinventer boost::tuple, oui.
Que boost::tuple soit une abstraction appropriée pour le cas cité, c'est là que j'ai un gros doute.
La structure que je propose a l'avantage de nommer ses différents membres, ce qui la rend bien plus simple d'utilisation que boost::tuple. Ce dernier me semble plus indiqué pour écrire du code générique, mais pour du code applicatif, ça me semble inutilement lourd. Ou alors, propose pour la prochaine version du C++ de supprimer le mot clef struct, et de ne permettre que des tuples ;)
Dans le cas precis des coordonnees d'un point, si on peut etre amene a manipuler des points de dimensions differentes, j'aurais plutot tendance a utiliser boost::array pour un truc du genre (code joyeusement inspire de celui d'ITK)
voire un simple tableau.Code:
1
2
3
4
5
6
7
8 template<unsigned int Dimension, typename TCoordType> struct Point { boost::array<TCoordType, Dimension> data; TCoordType operator[](unsigned int x) const; TCoordType & operator[](unsigned int x); }
Utiliser boost::tuple me parait une mauvaise idee : l'utilisation de coordonnees sous entend generalement des operations geometriques qui ne sont pas presentes dans boost::tuple.