C ++ «& lt;», не менее чем оператор?

В следующем коде для бинарного дерева поиска:

template <class TKey>
class bst<TKey>::node *bst<TKey>::insert(node *T, TKey &key)
{
if (T == NULL) {
T = new node;
T->key = key;
} else if (T->key == key) {
cout << "key " << key << " already in tree" << endl;
} else {

int dir = T->key < key;
T->link[dir] = insert(T->link[dir], key);

}

return T;
}

Я запутался, что за линия

int dir = T->key < key;

делается. Я мог понять «int dir = T-> key», хотя, конечно, это не имело бы смысла, но я не видел «<оператор использовал таким образом раньше. Любые подсказки?

3

Решение

T->key < key это условие. Это будет оценивать либо true или же false,
Если это оценивает true, dir получит значение 1иначе получит значение 0,

int dir = T->key < key;

это короткая форма для письма

int dir;
if(T->key < key)
dir = 1;
else
dir = 0;

Когда boolean назначен на int, он получает значение 0 или же 1 соответствует false или же true,

9

Другие решения

Если оператор не перегружен, то он имеет обычное значение; это оценивает либо true или же false, Это bool тип, и, следовательно, может быть неявно преобразован в int,

Однако если TKey является классом и перегружает его, или есть глобальная перегрузка, тогда мы понятия не имеем, что он делает, пока не увидим код.

6

< возвращает 1, если первый операнд меньше второго операнда, или 0 в противном случае.

0

< operator — логический оператор сравнения, т. е. он оценивает 0 если условие ложно, и 1 если условие верно. Обычно он используется в условных выражениях, но прямое использование возвращаемого значения вполне допустимо. В этом случае, если значение T->key меньше, чем значение key, dir будет 1 иначе dir будет 0,

0

Итак, поскольку дерево бинарного поиска хранит значения, меньшие, чем root, слева и большие значения справа, вам нужно выбрать, в каком направлении будет происходить вставка. Для этого вы сравниваете ключ со значением текущего узла. Результат этого сравнения сохраняется в переменной dir. Таким образом, если ключ меньше значения T, dir получает 1, который представляет левую сторону в ссылке [], которая содержит указатели на левую и правую ветви узла T. И затем вставка выполняется рекурсивно с левым узлом T. почему вы делаете сравнение там. Просто чтобы увидеть, нужно ли вставлять элемент справа или слева от текущего узла.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector