C ++“<”,不低于运算符?

时间:2012-11-18 05:16:31

标签: c++

在以下二进制搜索树的代码中:

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-&gt; key”,虽然当然没有意义,但我没有看到“&lt;”之前以这种方式使用的运算符。有线索吗?

5 个答案:

答案 0 :(得分:9)

T->key < key是一个条件。它将评估为truefalse。 如果评估为true,则dir将获得值1,否则将获得值0

int dir = T->key < key;

是写作的缩写

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

boolean分配给int时,它会获得与01对应的值falsetrue。< / p>

答案 1 :(得分:6)

如果操作员没有超载,那么它具有通常的含义;它评估为truefalse。这是bool类型,因此可以隐式转换为int

但是,如果TKey是一个类并且重载它,或者存在全局重载,那么除非我们看到代码,否则我们不知道它做了什么。

答案 2 :(得分:0)

如果第一个操作数小于第二个操作数,则

<返回1,否则返回0。

答案 3 :(得分:0)

<运算符是一个布尔比较运算符 - 例如,如果条件为假,则计算结果为0;如果条件为真,则计算结果为1。它通常用在条件语句中,但直接使用返回值是完全有效的。在这种情况下,如果T->key的值小于key的值,则dir将为1,否则dir将为0

答案 4 :(得分:0)

好吧,因为二元搜索树在左侧存储的值小于root,在右侧存储的值越大,您需要选择插入的方向。为此,您要将密钥与当前节点的值进行比较。此比较的结果存储在dir变量中。因此,如果key小于T的值,则dir得到1,表示链接[]中的左侧,它保存指向节点T的左右分支的指针。然后以T的左节点递归地完成插入。这是为什么你在那里进行比较。只是为了看看我们是否必须将元素插入当前节点的右侧或左侧。