【发布时间】:2014-10-30 12:38:03
【问题描述】:
我有一个 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 );
}
为了让它工作,我在我的类中实现了一个重载的
bool operator <(const myClass & myObject) const
{
return myVariable < myObject.myVariable;
}
当我创建对象的 AVL 树时,这非常有效:
AvlTree<myClass> myTree;
但是,当我创建指向对象的 AVL 树时,它不起作用:
AvlTree<myClass*> myTree;
树内部的比较似乎是比较指针的地址,而不是成员变量。我尝试在我的类中为指针实现类似的重载
bool operator <(const myClass *& myObject) const
{
return myVariable < myObject->myVariable;
}
但是比较忽略了我的重载运算符,仍然使用指针的地址。有什么方法可以强制比较使用我的运算符,就像它们对普通对象一样?
【问题讨论】:
-
不要(仅)重载
<,将比较器类作为另一个模板参数传递给树模板。有关详细信息,请参阅 std::map。
标签: c++ pointers operator-overloading binary-search-tree avl-tree