2017-09-01 14 views
0

Comment puis-je obtenir le nœud racine d'un std::set ou std::map? Il fournit la fonction pour obtenir les itérateurs begin() et end(), mais je n'ai rien vu dans la documentation sur l'obtention de la racine.Comment puis-je obtenir la racine d'un arbre binaire (ensemble ou carte)?

+0

Veuillez éditer votre question afin que nous puissions vous expliquer pourquoi vous avez besoin. Vous ne devriez probablement pas en avoir besoin. –

Répondre

2

Vous ne pouvez pas faire cela. C'est pourquoi vous avez reçu des itérateurs - pour vous abstraire des détails de la mise en œuvre. De plus, je viens de faire Ctrl + F sur le mot-clé "tree" dans C++ Standard et trouvé seulement 5 occurrences dont aucune n'est liée aux détails d'implémentation de set/map.

Si vous avez besoin d'une racine d'arbre binaire - créez votre propre structure de données.

+0

Combien serait-il pire que celui de la bibliothèque standard? – Zebrafish

+0

@Zebrafish beaucoup. Quel est le problème que vous essayez de résoudre? –

+0

Les seules fonctions qui vous sont attribuées sont find() et lower_bound(). Dites que j'avais le mot "prix" dans l'ensemble, et je voulais une liste de mots commençant par "priz", pour utiliser la méthode lower_bound j'obtiendrais l'itérateur inférieur comme lower_bound ("priz"), et l'itérateur supérieur comme "priza", parce que je veux la gamme entre "priz" et "priza". Si j'ai déjà l'itérateur initial, je peux aller manuellement à gauche et à droite. J'espérais commencer à la racine, mais peu importe. – Zebrafish

1

Il n'y a pas de concept de nœud racine dans l'un de ceux Abstract Data Types (ni set ni map). Le fait qu'ils soient implémentés en tant que red–black tree est juste un détail d'implémentation.

Voici les opérations soutenues:

Sur la page wikipedia, l'un des avantages sur ADT est:

Encapsulation
L'abstraction fournit une promesse que toute implémentation de l'ADT a certaines propriétés et capacités; sachant que c'est tout ce qui est nécessaire pour utiliser un objet ADT. L'utilisateur n'a pas besoin de connaissances techniques sur la manière dont la mise en œuvre fonctionne pour utiliser l'outil ADT. De cette manière, la mise en œuvre peut être complexe mais sera encapsulée dans une interface simple lorsqu'elle est réellement utilisée.

Il semble que vous essayiez de rompre cette encapsulation parce que vous en savez trop sur l'implémentation.