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

Langage C++ Discussion :

Table de hachage unordered_map et pointeurs vers objet ou objet, efficacité ?


Sujet :

Langage C++

Mode arborescent

damien_mattei Table de hachage... 21/08/2019, 12h42
Bousk Une classe Point3D est... 21/08/2019, 14h44
damien_mattei pour l'include du cpp c'est... 21/08/2019, 18h23
Bousk Plus de code et plus... 21/08/2019, 18h42
damien_mattei visiblement vous lisez pas... 21/08/2019, 19h57
Bousk Je lis le code, et à... 21/08/2019, 20h22
damien_mattei ??? un pointeur est une... 21/08/2019, 23h55
dalfab Bonjour, On n'appelle... 22/08/2019, 00h16
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Programmation Fonctionelle
    Inscrit en
    Août 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Programmation Fonctionelle
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2019
    Messages : 9
    Par défaut Table de hachage unordered_map et pointeurs vers objet ou objet, efficacité ?
    Bonjour,

    j'ai une classe Point3D<T> définie ainsi:

    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
    19
    20
    21
    22
    23
    24
    25
    template <class T> class Point3D {
     
    public:
     
      T x,y,z; // coords 
     
     
      Point3D();
     
      ~Point3D();
     
      Point3D(T x,T y,T z);
     
      // copy constructor
      Point3D(const Point3D<T> &);
     
      // assignation operator
      Point3D<T> & operator=(const Point3D<T> &);
     
      // equality operator
      bool operator== (const Point3D<T> &);
     
    };
     
    #include "Point3D.cpp"

    Point3D.cpp contient entre autres ceci pour utilisation avec des unordered_map:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    ...
     
     
    /* we need to specialize the hash function for our class
       because standart hash function works only with basic types
       such as string,int,etc...
    */
     
    // hash function for Point3D <-> Pixel
     
    template <class T> struct hash_point3d {
      size_t operator()(const Point3D<T> &p3d ) const
      {
        return hash<const Point3D<T> *>()(&p3d); // hash code is made with address !!!
      }
    };
     
     
    // equality test, mainly used with hash tables
    template <class T> struct point3DEquals : binary_function<const Point3D<T>&, const Point3D<T>&, bool> {
      bool operator()(  const Point3D<T>& lhs, const Point3D<T>& rhs ) const
      {
        return (&lhs == &rhs); // i compare the addresses !!!
      }  
    };     
     
    // equality operator
    template <class T> bool Point3D<T>::operator== (const Point3D<T> &p3d)  {
     
      return (x==p3d.x) && (y==p3d.y) && (z==p3d.z);
     
    }
     
    ...

    j'ai aussi une classe Point2D et je veux associer des Point3D projetés sur un plan en Point2D liés entre eux par une table de hachage, unordred_map pour commencer:

    je peux donc écrire cette définition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unordered_map<Point3D<float>,Point2D<int>,hash_point3d<float>,point3DEquals<float>> htPointPixel;
    et ça marche, mon code compile et fonctionne mais je me demande si j'aurai pas intérêt, dans un pur souci d'efficacité à définir ma table de hachage comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unordered_map<Point3D<float> *,Point2D<int> *> htPointersPointPixel;
    j'ai l'impression que à l'exécution les pointeurs seront plus légers que des objets Point3D à manipuler (constructeur de recopie....etc)

    dans le code (coté développement) ce sera peut-être l'inverse et surement moins élégant.

    des opinions sur l'une ou l'autre de ces méthodes ?

    Damien

    PJ: la classe complète Point3D est en pièce jointe
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pointeur vers objet dans un vecteur
    Par julieng31 dans le forum C++
    Réponses: 3
    Dernier message: 27/09/2013, 09h29
  2. Réponses: 5
    Dernier message: 21/06/2013, 21h13
  3. Passage de tableau de pointeurs vers objets
    Par gnulix dans le forum C++
    Réponses: 5
    Dernier message: 14/04/2007, 19h41
  4. Réponses: 4
    Dernier message: 04/02/2007, 00h06

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