Ik heb momenteel een binaire zoekboom setup, met behulp van sjablonen om mij toe om de aard van de gegevens gemakkelijk veranderen binnen de binaire zoekboom. Op dit moment heb ik problemen met overbelasting van de studentRecord klasse die de gegevens moeten worden opgeslagen in de boom bevat. Ik moet de vergelijking operators overbelast binnen deze klasse, zodat mijn BST goed twee objecten kunnen vergelijken op basis van een van hun inhoud (in dit geval, de student-ID). Echter, ondanks overbelasting van de exploitanten binnen studentRecord, goede vergelijkingen zijn nog steeds niet voorkomen.
Details hieronder:
Momenteel heeft de bst object studentTree gecreëerd, type
bst<studentRecord *> studentTree;
studentRecord is de volgende 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;
};
Wanneer er nieuwe items worden toegevoegd aan mijn BST, moeten ze worden met elkaar vergeleken. Daarom wilde ik de studentRecord klasse overbelasten, zodat wanneer deze vergelijking proces plaatsvindt, wordt de studentIDs worden vergeleken (als anders, een ongeldige vergelijking zal worden gemaakt).
Echter, mijn inbrengen functie gebruikt nooit mijn overbelast vergelijking functies. In plaats daarvan lijkt te zijn het vergelijken van de twee objecten op een andere manier, wat resulteert in ongeldige sortering binnen de BST. Een deel van mijn insert functie is hieronder - het is belangrijk op te merken dat zowel toInsert en nodePtr-> gegevens van het type studentRecord zou moeten zijn, als gevolg van de template proces optreedt.
// 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);
}
Ook hier is een deel van het 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 ideeën over wat kan dit veroorzaken? Ben ik overbelasting van de verkeerde klasse of de verkeerde functie? Alle hulp wordt gewaardeerd - ik lijken te zijn de weg kwijt omdat er zo veel verschillende dingen zijn die zich in een keer.













