IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Creation d'une table de hashage


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Creation d'une table de hashage
    Bonjour,

    Afin de créer une table de hashage, pour repérer si a une position donnée (sur une carte 2D), un joueur est déjà présent.

    J'ai utilise la classe map avec pour clé une classe nommée Location (contenant deux entiers row et col) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<Location, int> orders;
    Lors d'un premier test, la compilation me retourne un message d'erreur trop complexe et trop long pour vous le copier ici.

    Mon test dans une fonction : newLoc est évidemment de type Location.

    Ma question est de savoir si déjà mon implémentation est bonne (j’espère avoir été assez explicite), ou s'il y aurai une autre solution afin de gérer les collisions en cpp, sachant que je dois déplacer un joueur sur une map. Et que je voudrais simplement vérifier si un autre joueur n'est pas présent a cette nouvelle positon demandée.

    Désolé de ne pouvoir mettre plus de code. A vrai dire c'est juste le principe qui m’intéresse, je ne cherche pas a ce que l'on code a ma place.

    Merci pour votre aide

    Enjoy !!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Bonjour SolarisTex,
    Personnellement pour les map, j'utilise plus des pointeurs sur ton objet et donc ton code deviendrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::map<Location*, int> orders
    Location newLoc;
    orders[newLoc] = 1;
    Ensuite en ce qui concerne la valeur associée à ta clé, je pense qu'un booléen pour plus te convenir (true si un joueur est déjà présent, false sinon).

    Voilà!

    En espérant t'avoir aidé

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Il faut implémenter les opérateurs de comparaison (<,>,==) si tu veux que Location soit la clef de ta map (qui est triée, et qui en a donc besoin)
    De plus il faut que Location ait un constructeur par défaut (sans paramètres) et un opérateur d'assignation.
    Ensuite, quand tu dis 'test', tu parles d'un test d'égalité ? Parce que si c'est le cas, le code pour ce test que tu as posté est faux : il te faut utiliser '==' (opérateur d'égalité) et non '=' (opérateur d'assignation).
    Enfin, as-tu rempli ta map avec toutes les Location possibles ? car si tu veux faire un test tel que tu l'as écrit, il faut que 'orders[newLoc]' soit défini, sinon je ne sais pas quel sera le comportement.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Et sinon, juste pour le rappeler (au cas où), std::map<> n'est PAS une table de hachage. C'est un RB-tree, donc avec un temps de recherche dont la complexité est O(n.log2(n)).

    Si tu veux une table de hash, c'est std::tr1::unordered_map<> (C++03 avec TR1 ; std::unordered_map pour C++11).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour toutes ces réponses je vais me pencher dessus.

    Ensuite en ce qui concerne la valeur associée à ta clé, je pense qu'un booléen pour plus te convenir (true si un joueur est déjà présent, false sinon).
    C'est effectivement ce que j'ai utilise

    Ensuite, quand tu dis 'test', tu parles d'un test d'égalité ? Parce que si c'est le cas, le code pour ce test que tu as posté est faux
    Non je cherchais juste a faire une affectation.

    Et sinon, juste pour le rappeler (au cas où), std::map<> n'est PAS une table de hachage.
    Oui, je cherchais a utiliser map afin d'en créer une. Merci pour ta solution je vais essayer ça.

    Merci pour votre réactivité.

    Enjoy !!!

Discussions similaires

  1. creation d'une table avec une clé primaire multiple
    Par oursquetaire dans le forum Oracle
    Réponses: 2
    Dernier message: 23/12/2005, 13h29
  2. Creation d'une table avec un TSQLQuery
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/12/2005, 09h08
  3. [MySQL] Creation d'une table ?
    Par artotal dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/10/2005, 17h04
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo