Je me demande si quelqu'un peut recommander une bonne implémentation d'arborescence C++, si tout va bien une compatible stl si possible.
Pour mémoire, j'ai écrit des algorithmes d'arbre plusieurs fois auparavant, et je sais que cela peut être amusant, mais je veux être pragmatique et paresseux si possible. Donc, un lien réel vers une solution de travail est l'objectif ici.
Remarque: je recherche un arbre générique, pas un arbre équilibré ou une carte/ensemble, la structure elle-même et la connectivité de l'arbre sont importantes dans ce cas, pas seulement les données à l'intérieur. Ainsi, chaque branche doit pouvoir contenir des quantités arbitraires de données, et chaque branche doit pouvoir être répétée séparément.
Je ne connais pas vos besoins, mais ne seriez-vous pas mieux avec un graphique (implémentations par exemple dans Boost Graph ) si vous êtes principalement intéressé par la structure et pas tellement par l'arbre des avantages spécifiques comme la vitesse grâce à l'équilibrage? Vous pouvez `` émuler '' un arbre à travers un graphique, et peut-être qu'il sera (conceptuellement) plus proche de ce que vous recherchez.
Jetez un oeil à this .
La bibliothèque tree.hh pour C++ fournit une classe de conteneur de type STL pour les arbres n-aires, basée sur les données stockées aux nœuds. Différents types d'itérateurs sont fournis (post-commande, pré-commande et autres). Dans la mesure du possible, les méthodes d'accès sont compatibles avec la STL ou des algorithmes alternatifs sont disponibles.
HTH
Je vais suggérer d'utiliser std :: map au lieu d'un arbre.
Les caractéristiques de complexité d'un arbre sont:
Insérer: O (ln (n))
Suppression: O (ln (n))
Trouver: O (ln (n))
Ce sont les mêmes caractéristiques que std :: map garantit.
.
Ok les amis, j'ai trouvé une autre bibliothèque d'arbres; stlplus.ntree . Mais je ne l'ai pas encore essayé.
Si vous n'avez pas de paires (clé, valeur), mais simplement des clés, utilisez std :: set. Cela utilise le même arbre rouge-noir que std :: map.