在模板中传递参数

时间:2013-12-29 09:56:27

标签: c++ tree

我正在实现一个Red black Tree,其中insert函数应该有两个模板,一个用于项目,另一个用于键。我以这种方式传递插入函数中的参数:

template <class Item, class Key>
void RedBlackTreeNode<Item, Key>::InsertKey(const Item *&T, const Key *&z)

我试图在第二个参数中传递一个数组(由随机元素组成),这样:

const int* pointer = &arr[i];
t1.InsertKey(//something else here// , pointer); //insert the tree and the node

但是,为了在红黑树中插入元素,我无法弄清楚要传递的内容作为第一个参数。第一个参数代表什么?我试图以这种方式传递树的根:

Node<int, int> n1;
t1.InsertKey(n1->root, pointer);

不幸的是,这不起作用。请帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果你正在实现一个红黑树(或者甚至只是一棵二叉树),你就是插入方法,只需将元素作为参数插入即可。您正在插入一个可以与另一个项目进行比较的Item,但没有Key的概念。如果您要创建Key / Value容器,则可以只使用std::pair<Key, Value>项并在item.first上进行比较,或类似的内容。

以下是binary search tree插入代码的模拟。你可以从那开始添加[红黑树插入(http://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion)必须保留的属性:

template <class Item>
void BinarySearchTreeNode<Item>::Insert(Item item)
{
   if (item < this->item)
   {
     if (this->leftChild == nullptr)
        this->leftChild = new BinarySearchTreeNode(item);
     else
        insert(this->leftChild, item);
   } 
   else 
   {
     if (this->rightChild == nullptr)
        this->rightChild = new BinarySearchTreeNode(item);
     else
        insert(this->rightChild, item);
   }
}

这里有一个示例用法(假设其余的实现已经完成):

BinarySearchTree<int> tree;


tree.Insert(1); // Call insert on root node