Al momento ho un binario di configurazione albero di ricerca, utilizzando i modelli per permettermi di cambiare facilmente il tipo di dati all'interno del albero binario di ricerca. Al momento, sto avendo problemi di sovraccaricare la classe studentRecord che contiene i dati da memorizzare nella struttura. Ho bisogno di sovraccaricare gli operatori di confronto all'interno di questa classe, in modo che il mio BST può confrontare correttamente due oggetti in base a uno dei loro contenuti (in questo caso, lo studente ID). Tuttavia, nonostante il sovraccarico degli operatori all'interno studentRecord, il confronto corretto non sono ancora verificando.
Dettagli qui di seguito:
Al momento, è stata creata la studentTree oggetto BST, di tipo
bst<studentRecord *> studentTree;
studentRecord è la seguente classe:
// 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;
};
Ogni volta che vengono aggiunti nuovi elementi al mio BST, devono essere confrontati tra loro. Quindi, ho voluto sovraccaricare la classe studentRecord, in modo che quando si verifica questo processo di confronto, i studentIDs vengono confrontati (come altrimenti, un confronto valido sarà resa).
Tuttavia, la mia funzione di inserimento non usa mai le mie funzioni di confronto overload. Invece, sembra essere a confronto i due oggetti in qualche altro modo, con conseguente smistamento valida all'interno del BST. Parte della mia funzione di inserimento è al di sotto - è importante notare che sia toInsert e nodePtr-> dati dovrebbero essere di tipo studentRecord, a causa del processo si verificano template.
// 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);
}
Inoltre, ecco una parte della classe di defintion BST
// 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.....
Tutte le idee su ciò che può essere la causa? Sto sovraccaricare la classe sbagliata o la funzione sbagliata? Ogni aiuto è apprezzato - mi sembra di essere perdersi dato tante cose diverse si verificano in una sola volta.













