2010-07-28 6 views
1

J'ai une structure de données qui stocke ... bien, des données. Maintenant, j'ai besoin d'accéder à différentes données de façon légèrement différente, donc je construis essentiellement un index en mémoire. Mais je me demande: l'index devrait-il contenir des pointeurs ou des copies?Construction d'un index: Copies ou pointeurs?

Pour élaborer, dire que j'ai

class Widget 
{ 
    // Ways to access the list of gears... 
private: 
    std::list<Gears> m_gears; 
}; 

Maintenant, j'ai deux Widget s, et il existe entre ces deux une correspondance entre leurs Gear s. À l'heure actuelle, c'est

boost::unordered_map<Gear, Gear> 

mais Gear est une classe assez lourde, et je me sens comme faire autant de copies est mauvaise conception. Je pourrais stocker un pointeur, mais alors le mappage n'est valide que pour la durée de vie des Widget s, et vous commencez à obtenir -> s ... (Et si std::list change un std::vector, cela devient plus complexe ...) En ce qui concerne les copies, c'est en fait légèrement pire: Il y a deux boost::unordered_map s, un pour chaque direction. Donc, pour chaque Gear, j'en fais deux copies.

Sinon, je pourrais mettre l'index à l'intérieur de la classe Widget, mais j'ai l'impression que cela viole les responsabilités de la classe Widget.

+1

Le boost ne possède-t-il pas de conteneur multi-index? – sbi

Répondre

0

Vous pouvez essayer Boost pointeur Library Container: http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html

Je pense qu'il aborde exactement le problème que vous rencontrez.

+0

Ma compréhension des Boost Pointer Containers est qu'ils possédaient les objets insérés dans ceux-ci. Mes objets sont réellement sur la pile, et donc, n'ont pas besoin de 'delete' appelé. Je pourrais peut-être examiner cela pour voir s'il existe un moyen de l'utiliser sans en supprimer le contenu. – Thanatos

0

Pourriez-vous stocker tous les rapports au même endroit, comme dans la classe des engrenages, puis demander à chaque mappage ET widget de ne stocker que la référence/index?

Vous devriez garder une trace des références de chaque équipement afin de savoir quand vous pouvez les éliminer, mais cela devrait être assez facile.

+1

Cela ressemble à un poids mouche - c'est ce que vous voulez dire? – Thanatos

+0

Oui, cela ressemble à ce que je décrivais. (Merci, je n'avais pas entendu le terme avant.) Puisque vous avez, ne résout-il pas votre problème? – WillfulWizard

Questions connexes