Ich habe zur Zeit einen binären Suchbaum Setup-Vorlagen verwendet, ich zu erlauben, einfach die Art von Daten innerhalb des binären Suchbaumes zu ändern. Im Moment bin ich Probleme der studentRecord Klasse Überlastung, die die Daten enthält im Baum gespeichert werden. Ich brauche die Vergleichsoperator innerhalb dieser Klasse zu überlasten, so dass mein BST richtig zwei Objekte basierend auf einen ihrer Inhalte vergleichen (in diesem Fall den Studentenausweis). Doch trotz der Betreiber innerhalb studentRecord Überlastung, sind geeignete Vergleiche noch nicht auftreten.
Details unten:
Im Moment hat das bst Objekt studentTree erstellt wurde, vom Typ
bst<studentRecord *> studentTree;
studentRecord ist die folgende Klasse:
// studentRecord class
class studentRecord{
public:
// standard constructors and destructors
studentRecord(int studentID, string lastName, string firstName, string academicYear){ // constructor
this->studentID=studentID;
this->lastName=lastName;
this->firstName=firstName;
this->academicYear=academicYear;
}
friend bool operator > (studentRecord &record1, studentRecord &record2){
if (record1.studentID > record2.studentID)
cout << Greater! << endl;
else
cout << Less then! << endl;
return (record1.studentID > record2.studentID);
}
private:
// student information
string studentID;
string lastName;
string firstName;
string academicYear;
};
Jedes Mal, wenn neue Objekte zu meinem BST hinzugefügt werden, müssen sie miteinander verglichen werden. Daher wollte ich die studentRecord Klasse zu überlasten, so dass, wenn dieser Vergleich Prozess auftritt, werden die studentIDs verglichen (wie sonst, ein ungültiger Vergleich wird gemacht werden).
Jedoch nie verwendet meine Einfügefunktion meine überladenen Vergleichsfunktionen. Stattdessen scheint es, die beiden Objekte auf eine andere Weise zu vergleichen, innerhalb des BST in einem ungültigen Sortierung führt. Ein Teil meiner Insert-Funktion ist unten - es ist wichtig zu beachten, dass sowohl toInsert und nodePtr-> Daten vom Typ studentRecord sein sollte, aufgrund der Templat-Prozess auftritt.
// insert (private recursive function)
template<typename bstType>
void bst<bstType>::insert(bstType & toInsert, bstNodePtr & nodePtr){
// check to see if the nodePtr is null, if it is, we've found our insertion point (base case)
if (nodePtr == NULL){
nodePtr = new bst<bstType>::bstNode(toInsert);
}
// else, we are going to need to keep searching (recursive case)
// we perform this operation recursively, to allow for rotations (if AVL tree support is enabled)
// check for left
else if (toInsert < (nodePtr->data)){ // go to the left (item is smaller)
// perform recursive insert
insert(toInsert,nodePtr->left);
// AVL tree sorting
if(getNodeHeight(nodePtr->left) - getNodeHeight(nodePtr->right) == 2 && AVLEnabled)
if (toInsert < nodePtr->left->data)
rotateWithLeftChild(nodePtr);
else
doubleRotateWithLeftChild(nodePtr);
}
Auch hier ist ein Teil der BST-Klasse defintion
// BST class w/ templates
template <typename bstType>
class bst{
private: // private data members
// BST node structure (inline class)
class bstNode{
public: // public components in bstNode
// data members
bstType data;
bstNode* left;
bstNode* right;
// balancing information
int height;
// constructor
bstNode(bstType item){
left = NULL;
right = NULL;
data = item;
height = 0;
}
// destructor
// no special destructor is required for bstNode
};
// BST node pointer
typedef bstNode* bstNodePtr;
public: // public functions.....
Alle Ideen, was dieses verursachen kann? Bin Überlastung ich die falsche Klasse oder die falsche Funktion? Jede Hilfe ist willkommen - ich scheine da so viele verschiedene Dinge verloren gehen zu werden, werden auf einmal auftreten.













