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

SL & STL C++ Discussion :

Taille de map


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut Taille de map
    Bonjour,

    Je me demandais quelle était la place en mémoire que prenais une map vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map<std::string, myclass> mymap;
    Avec le code ci-dessus est ce que mymap contiendra déjà (sans avoir inséré d'élément) des instances de la classe myclass ? Et prenant ainsi une certaine place en mémoire qui peut être conséquence si myclass est un "gros objet".

    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Je ne pense pas. Mais attention, la plupart des opérations des conteneurs standards utilisent une semantique de valeur. Ce qui veut dire des appels fréquents au constructeur de copie et opérateur d'affectation. Ils doivent donc être assez rapide si tu ne veut pas que cela impacte sur les perfs. si cela peut poser problème, utilise plutôt un pointeur/smart pour stocker ta classe dans la map.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Merci et bien vu pour les recopies.

    Sinon dans le même genre il y a t-il un intérêt à utiliser un vector combiné à une map pour l'indexation par clé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<myClass> data;
    std::map<std::string, unsigned int> ids; // positions dans data
    Plutôt que juste une map (string, myClass). Enfin j'ai vu ça une fois dans un code et je me suis demandé l'intérêt.

  4. #4
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    Citation Envoyé par Limuath Voir le message
    Bonjour,

    Je me demandais quelle était la place en mémoire que prenais une map vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map<std::string, myclass> mymap;
    Avec le code ci-dessus est ce que mymap contiendra déjà (sans avoir inséré d'élément) des instances de la classe myclass ? Et prenant ainsi une certaine place en mémoire qui peut être conséquence si myclass est un "gros objet".

    Merci d'avance.
    mets un point d'arret sur le contructeur et desctructeur de myclass (ou un trace) et tu auras la réponse

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Il peut y avoir un intérêt mais qui n'a rien à voir avec une optimisation.

    A priori on veut pourvoir obtenir un objet MaClasse à partir d'une string. La map est parfaite pour ça car elle optimise la recherche de la clef. Le problème est qu'elle doit être triée par clef. Donc tu n'a pas de controle sur l'ordre de stockage de tes objets dans cette map. Si tu veux par exemple afficher tous les éléments de la map dans un listbox en la parcourant via un iterator, l'ordre dans lequel les objets arrivent ne te conviendra peut être pas.

    Dans ce cas on stocke d'abord les objets dans un vector, dans l'ordre attendu pour l'affichage (ou autre) et on ne stocke dans la map que les positions des objets dans le vector.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Merci pour vos réponses. Je confirme que le constructeur n'est appelé qu'à l'insertion d'un élément (insert() ou operator[])


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

Discussions similaires

  1. Quelle taille choisir pour une carte Google Maps sur site mobile?
    Par Adélaide dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 30/04/2010, 09h34
  2. Connaître la taille d'une colonne dans un mapping
    Par pekka77 dans le forum ODI (ex-Sunopsis)
    Réponses: 0
    Dernier message: 30/04/2009, 15h59
  3. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 10h05
  4. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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