我有一个使用模板和假设节点对象具有可比性,所以他们直接进行比较,而不是比较某种键与对象相关联的AVL树:比较在AVL树由指针对象
bool operator <(const myClass & myObject) const
{
return myVariable < myObject.myVariable;
}
这工作完全当我创建一个AVL:
void insert(const Comparable & x, AvlNode * & t)
{
if(t == nullptr)
t = new AvlNode(x, nullptr, nullptr);
else if(x < t->element)
insert(x, t->left);
else if(t->element < x)
insert(x, t->right);
balance(t);
}
为了这个工作,我在我的课,它使用类的成员变量两个比较对象实现重载<操作对象树:
AvlTree<myClass> myTree;
但是,当我创建的指针AVL树对象不起作用:
AvlTree<myClass*> myTree;
树内的比较似乎比较指针的地址,而不是成员变量。我试图在我的课实施了类似的重载<运营商指针:
bool operator <(const myClass *& myObject) const
{
return myVariable < myObject->myVariable;
}
但比较会忽略我的重载运营商,仍使用指针的地址。有什么办法可以强制比较使用我的操作符,就像使用普通对象一样?
不要(仅)重载'<',将比较器类作为另一个模板参数传递给树模板。详情请参阅std :: map。 – 2014-10-30 13:49:34
我建议你看看这个 http://stackoverflow.com/questions/301330/determine-if-type-is-a-pointer-in-a-template-function – 2014-10-30 13:54:48