Передача аргументов в шаблонах

0

Я реализую Red Black Tree, где функция вставки должна иметь два шаблона, один для элемента, а другой для ключа. Я передаю параметры в функции вставки следующим образом:

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);

К сожалению, это не работает. Любая помощь, пожалуйста?

Заранее спасибо.

  • 0
    Какую ошибку вы получаете?
  • 0
    Если вы реализуете словарь (также известный как ассоциативный массив или карта), то Item - это, вероятно, тип значений, хранящихся на карте.
Показать ещё 7 комментариев
Теги:
tree

1 ответ

1

Если вы реализуете красное черное дерево (или просто просто двоичное дерево), вы используете метод вставки, чтобы вставить элемент в качестве параметра. Вы вставляете один Item который можно сравнить с другим элементом, нет понятия Key. Если вы хотите создать контейнер Key/Value, вы можете просто взять элемент std::pair<Key, Value> и сравнить item.first или что-то вроде этого.

Вот макет кода для вставки двоичного дерева поиска. Вы можете начать с этого, чтобы добавить свойства, которые необходимо сохранить для [вставки красного черного дерева (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
  • 0
    Следовательно, мой метод вставки не может принимать два параметра?
  • 0
    @ user3136756 Дело не в том, что он не может принимать два параметра, но какой будет второй? Если у вас есть объяснение / обоснование использования второго параметра, продолжайте :) Но базовое красно-черное дерево (или двоичное дерево) принимает только одно значение или элемент для вставки в узел.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню