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 :

Map ou vector?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut Map ou vector?
    Bonjour à toutes et à tous, c'est mon premier message et je suis novice en C++, donc merci pour votre indulgence,

    J'ai pour objectif d'optimiser l'espace mémoire occupé par mes structures de données. En même temps je veux créér un tableau associatif.

    Je veux savoir si un map occupe plus d'espace qu'un vecteur si les cellules des deux structures contiennent un même type de données et que les indices du map sont de type int.

    Si tel est le cas, est ce quedeux vecteurs, l'un contenant les indices et l'autres les données, occupent plus d'espace qu'une map.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    ça dépend de l'implémentation de la STL que tu utilises (propre à chaque compilateur)

    cependant, dit-toi bien que les map ont étées optimisées pour être utilisées comme des tableaux associatifs, si tu as besoin de faire un tableau associatif, utilise une map...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut
    Merci swoög,

    J'utilise dev-c++ et donc gcc.

    La taille occupée par la structure est primordiale pour moi.

    En fait je suis entrain d'implémenter un arbre B+. La taille des noeuds internes doit être allignée sur la taille d'une ligne de cache. Un noeud contient un tableau associant une clé de recherche à un pointeur vers un noeud fils du niveau suivant. Si j'utilise une map et que celle-ci occupe deux fois la taille d'un simple tableau de clés, je préfère utiliser un tableau de clés et stocker les nouds fils du niveau suivant de manière contigu. De cette manière d'une part chaque noeud interne conteint deux fois plus de clés que si j'utilisai une map et d'autre part la recherche reste correcte puisque si une recherche doit se porsuivre dans le noeud fils numéro n, je me pointe sur le premier fils et je fais n sauts (à la manière se seek).

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    A ta place j'utiliserais un std::vector<std::pair<int, Noeud*> > ; voire un std::set ou std::multiset si les noeuds sont triés.

    Ensuite faut voir si la structure utilisée pour stocker les noeuds est conforme aux coûts logarithmiques des différentes opérations sur les arbres B+. Par exemple avec std::map ou std::set tu as une recherche en temps logarithmique pour les noeuds ; avec std::vector tu as une recherche linéaire.

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Si la taille est vraiment primordiale pour toi, alors il vaut mieux passer par des types que tu peux parfaitement controller (c'est à dire des classes perso, optimisée)... mais j'ai peur que ça soit alors moins optimisé que la STL...

    ensuite à toi de voir... je pense qu'un vecteur prendra moins d'espace qu'un MAP... pour deux vecteurs, c'est pas sûr, mais je pense quand même que ce sera le cas... mais c'est à toi de voir si le rapport taille/temps de recherche est toujours aussi bon
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Si le contenu du vecteur est stable dans le temps, il y a toujours moyen de le trier une fois, et de faire ensuite les recherches avec std::equal_range.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Réécrire 'map' avec 'vector' (templates)
    Par Jéjé34 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/03/2014, 18h13
  2. map< string, map<string, vector<float> > >
    Par dauphin11 dans le forum Langage
    Réponses: 8
    Dernier message: 21/11/2011, 20h46
  3. map<int , vector <MaClasse> > MonNom;
    Par douls dans le forum SL & STL
    Réponses: 16
    Dernier message: 13/05/2008, 21h28
  4. Map et Vector
    Par kouax dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 31/05/2006, 14h00
  5. Réponses: 2
    Dernier message: 11/07/2003, 18h24

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