Objektbaum erstellen
-
Hallo, ich überlege geraden, wie ich Beziehungen zwischen Objekten verwalten kann. Leider habe ich keine Idee, wie ich das machen soll.
Jedes Objekt soll beliebig viele übergeordnete Objekte, und auch beliebig viele untergeordnete Objekte haben. Das Ganze soll dann später wie in einer Art Mindmap dargestellt werden, sodass von jedem Objekt ein Pfeil zu seinen untergeordneten Objekten geht.
Ich glaube, das ginge irgendwie mit mehrfachverketteten Listen. Wie gehe ich (objektorientiert) an dieses Problem ran ?
-
Solche abhängigkeiten sind ein typisches graphenproblem. google also mal nach einer datenstruktur die sich graph nennt. Die boost-jungs haben da übrigens ne tolle lib für sowas.
So far ...
-
Danke für die Hilfe
Wäre es ein Ansatz, das ganze wie in einer Liste zu machen ?
struct Knoten { *Knoten Child *Knoten Parent };
-
Ja kann man machen. Ein graph ist im prinzip nichts anderes als eine menge von knoten von denen manche (in deinem fall alle) in einer bestimmten relation stehen. In deinem fall ist es eben eine abhängigkeitsrelation. Nur das jeder knoten eben beliebig viele kinder und unter umständen auch beliebig viele väter haben kann. Das müssstest du dann noch bedenken.
-
struct Knoten { *Knoten Child *Knoten Parent };Damit hat man aber nur einen Vorgänger und einen Nachfolger. Du brauchst aber ein Feld um mehrere zu haben. Also entweder "**Knoten ..." dann verwaltest das selber oder nutzt die STL (z.B. Vector) um das zu machen.
-
prolog schrieb:
JNur das jeder knoten eben beliebig viele kinder und unter umständen auch beliebig viele väter haben kann. Das müssstest du dann noch bedenken.
Man kann das je nach anwendung auch mit einer sparse-matrix implementieren.
btw. sind die zeiger falsch declariert.
Denkbar wäre folgender ansatzstruct node{ std::deque<boost::shared_ptr<node> > successor_; std::deque<boost::shared_ptr<node> > predecessor_; };Oder man nimmt nackte pointer...
So far ...