C++中的"<"运算符是什么意思?

3
在下面这段二叉搜索树的代码中:
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”,尽管当然这没有意义,但我以前从未见过“<”运算符以这种方式使用。有任何线索吗?


“<”是“小于”的意思:该行代码将一个布尔值0或1赋给一个整数,如果打开警告,可能会被标记? - Mitch Wheat
所有条件运算符都会返回01。例如:int a = 1 == 0;将在a中赋值为0。同样,int a = a == a;将在a中赋值为1。所有条件运算符都以相同的方式工作。 - shashwat
5个回答

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;

当将一个布尔值赋给整型变量时,它会得到值0或1,分别对应于false或true。

6
如果运算符没有被重载,那么它具有通常的意义;它会评估为truefalse。这是一个bool类型,因此可以隐式转换为int
然而,如果TKey是一个类并对其进行了重载,或者存在全局重载,那么除非我们看到代码,否则我们就不知道它做了什么。

+! 用于提高重载的可能性,这可能具有非布尔返回类型。 - Matt Phillips

0

< 如果第一个操作数小于第二个操作数返回1,否则返回0。


0

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


0

二叉搜索树将小于根节点的值存储在左侧,大于根节点的值存储在右侧,因此需要选择插入方向。为此,您需要将键与当前节点的值进行比较,并将比较结果存储在dir变量中。因此,如果键小于T的值,则dir获取1,表示在保存指向节点T的左右分支的link[]中的左侧进行插入。然后使用T的左节点递归地进行插入。这就是为什么要在那里进行比较。只是为了查看我们是否必须将元素插入到当前节点的右侧或左侧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接