Pour une couche de modèle indépendante de la plate-forme, j'ai des données hiérarchiques (chaînes, en fait) qui ressemblent à ceci: p>
Maintenant, dans chaque "niveau" (élément, sous-couche, soutième, etc.) Les éléments doivent être triés par ordre alphabétique. P>
semble une solution simple serait de créer une classe simple avec une STD triée :: Vector ou STD :: Multimap pour suivre ses enfants et un pointeur à son parent. (et un élément racine). Je devrais généralement parcourir les enfants de chaque article dans une direction avancée. P>
Après construction / tri, je n'ai pas besoin d'ajouter ou de supprimer des éléments. Généralement petit nombre d'articles (centaines). P>
Ceci est pour l'organisation modèle des données de support d'un contrôle de style de contour. P>
Rouler une classe simple serait facile, mais c'est un tel modèle commun - n'est-ce pas déjà un conteneur STL prêt à l'emploi avec ce comportement? P>
4 Réponses :
non. Ne veut pas dire être Curt, mais c'est la réponse; voir par exemple Josuttis ou la norme. Vous devrez créer une classe quels pointeurs parent / enfant le long des lignes que vous avez suggéré et utilisez un vecteur ou un autre conteneur standard de ceux-ci. P>
rien dans la STL elle-même, mais vous pourriez trouver cela utile: p>
arbre.hh: une classe d'arborescence C ++ de type stl P>
Son API suit exactement les conteneurs STL, et il devrait faire ce que vous recherchez. P>
Je crois leur exemple est exactement ce que vous demandez (un arbre avec des chaînes), en fait. p>
Merci - c'est une classe élégante. Il est sous licence sous GPLV2 / GPLV3. Je développe des logiciels commerciaux. Si je ne modifie pas le code de quelque manière que ce soit, suis-je nécessaire de distribuer un code source?
Hmmm Je ne suis pas un expert du tout, mais ça sonne comme si vous seriez faire juste que . Vous pourrez peut-être utiliser le Classe d'arborescence de la propriété de Boost A> à la place.
@Smgreenfield - Je suis entré à la même conclusion que cette classe ne convient pas aux applications commerciales.
La réponse à votre question est non, il n'y a pas d'arbre dans la STL. Les modèles que vous avez suggérés sont bien. Voir aussi Cette question . P >
une solution simple: p>
Vos clés sont Tant que votre A Si votre type std :: vecteur
std :: vecteur
GUID code> est tritable via
opérateur << / code>, tri lexographique sur le
std :: vecteur code> obtiendra les choses dans l'ordre demandé. p>
mappe
std :: vecteur
.first code> manuellement. p>
GUID code> peut avoir un "dernier élément", vous pouvez trouver tous les enfants de
{x, y, z} code> en trouvant
inférieur_bound Code> de
{x, y, z} code> et
upper_bound code> de
{x, y, z, last_guid} code>. Lui donner un "dernier élément" est un avantage à ne pas utiliser de pointeur nue. P>