Hi!
Ich versuche gerade, einen generischen BinaryTree (Heap) in C++ zu implementieren und stosse da auf einige Schwierigkeiten. Der Heap soll eine Menge von HeapNodes (wegen konstantem Zugriff) in einer Map verwalten.
Der generische Typ "HeapNode" ist folgendermaßen definiert:
template <class K, class D>
class HeapNode
{
public:
HeapNode(K key, D data);
...
};
#include heapnode.c
soweit so gut, der Typ HeapNode funktioniert wie erwartet. Bei der Implementierung des Heaps beginnen allerdings die Probleme:
Ich würde den "Heap" gerne so implementieren, dass die ihm als Datenstruktur zu Grunde liegende Map die Schlüssel vom Typ K, sowie die dazugehörigen Werte als generischen Typen HeapNode<K, D> speichert:
template <class K, class D>
class Heap
{
public:
Heap(map<K, HeapNode<K, D>> nodes);
protected:
map<K, HeapNode<K, D>> nodes;
};
#include heap.c
Alles anzeigen
Hier schreit aber der Compiler (g++ 2.8). Scheinbar stört ihn der generische Typ innerhalb des Wertetyps von map. Das gleiche passiert übrigens auch bei Verwendung von vector, z.B: vector<HeapNode<K, D>>. Sind hier nur "konkrete" Datentypen innherhalb von STL Containern erlaubt?
...was ich also benötige ist eine Einschränkung des Wertetypen der map auf Objekte vom Typ HeapNode mit key K und value V.
Hat jemand einen Plan? Danke!
lg, martin