2010-07-29 3 views
0

J'ai un objet Line qui contient 2 objets de type Point appelés Point1 et Point2. Je veux créer un HashMap contenant des lignes et dont les clés sont std::pair<Point1, Point2>.Carte de hachage avec deux clés - Recherche tous les éléments liés à une clé. C++

Ce que je voudrais faire est de trouver toutes les lignes avec sont référencées (par exemple) par Point1, c'est-à-dire avec la clé std::pair<Point1, Anything>. Je ne me soucie pas de std::pair<Anything, Point1>.

Je ne sais pas si c'est possible ou non, j'espère que c'est le cas. Certes, la clé

Merci

Répondre

1

Il semble que ce que vous voulez vraiment est un std::multimap (ou std::unordered_multimap), avec des points individuels comme les clés, et les lignes (pair<point, point>) que les valeurs associées. Sinon, puisque la clé contient le premier point, vous pouvez le faire comme std::multimap<point, point>, pour éviter de stocker Point1 deux fois, une fois comme clé et de nouveau comme partie de la valeur associée. De toute façon, il est facile de rechercher toutes les lignes qui utilisent un point particulier.

Une autre possibilité (si la collection de lignes est raisonnablement statique) serait de placer vos objets lignes dans un vecteur, triés par Point1. Ceci (encore) vous permet de rechercher rapidement toutes les lignes qui incluent un point particulier. L'avantage serait que cela réduit la quantité de données à stocker (élimine les pointeurs entre les nœuds) et améliore généralement la vitesse de recherche. L'inconvénient est que l'insertion ou la suppression d'éléments est relativement lente.

+0

Merci pour votre réponse. En fait, ma ligne ne contient pas seulement cette paire de points, elle a aussi d'autres attributs, donc j'ai besoin de garder l'objet ligne. Et l'ordre des points importe, je devrais chercher soit et . Qu'en est-il de deux multimaps, un pour le premier point et l'autre pour le second? Cela prendra un peu de mémoire cependant. – ccote

+0

Plutôt qu'une carte supplémentaire, il est probablement plus facile de trouver simplement tous les points qui incluent ce que vous recherchez, puis de filtrer ceux-ci pour obtenir seulement ceux où ils sont dans la bonne position. –

0

est pas une paire, il est un point - Pont1 pour être précis. La paire est la donnée, pas la clé.

Questions connexes