-
Structure de donnée 3D
Bonsoir,
Je souhaite créer un plateau 3D sur lequel je place par exemple des pions ayant un seul attribut, leur couleur.
Chaque case ne peut posséder qu'un pion à la fois, elle peut aussi être vide.
Je peux accéder au pion via le couple (x,y,z) mais aussi obtenir un sous ensemble du plateau 3D du genre tout les pions ayant pour couple (1,y,z) ou (1,2,z) ou encore (x,1,z) etc...
Je peine a trouver une structure de données efficace pour modéliser au mieux mon problème, avez-vous une solution à me proposer s'il vous plait ?
Merci de toute l'attention que vous consacrerez a mon post.
-
À mon avis tu t'en sortirais tout simplement avec un tableau tridimensionnel ou une simple HashMap<IntTriplet, Pion>
-
Je n'aime pas trop le tableau dans mon cas puisqu'en fait le plateau est infini donc l'allocation de mémoire n'est pas fixe.
J'étais passé sur le chat il y a quelques semaines on m'avait proposé une HashMap<coupleInt, pion> aussi mais je n'ai pas trouvé comment à l'aide de ce moyen, obtenir tout les pions étant en x=0 et en y=1 par exemple.
Pourrais-tu me donner plus d'information sur la manière dont je devrais m'y prendre s'il te plait ?
Merci pour ta réponse.
-
Si ton plateau est infini, ça ne va pas aller avec une HashMap toute simple.
Il n'y a pas de structure commune correspondant à ton besoin, tu vas avoir besoin de structures proches des bases de données : des indexes sur les principaux critères de recherches.
Et un index se fait bien avec des HashMap<ClasseDuCritere, List<Pion>>*, c'est juste qu'il va t'en falloir plusieurs, et les garder cohérents les uns avec les autres. Du coup il faudrait les chapeauter avec une classe qui s'occupe de les gérer tous.
Bon, et ma foi, s'il y avait des bibliothèques qui offraient des structures à indexation multiple, j'en connaîtrait pas, mais... Ce serait pas surprenant.
* Un HashMultimap de Guava simplifierait pas mal.
-
Merci, je pense utiliser une base de donnée dans ce cas la, ce sera plus simple ^^