Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找两个变量是否仅使用小于运算符相等_C++_Algorithm_Binary Tree_Binary Search Tree - Fatal编程技术网

C++ 查找两个变量是否仅使用小于运算符相等

C++ 查找两个变量是否仅使用小于运算符相等,c++,algorithm,binary-tree,binary-search-tree,C++,Algorithm,Binary Tree,Binary Search Tree,我正在尝试实现一个二进制搜索树,我需要一个函数来告诉我树中是否已经存在元素! 然而,我唯一可以使用的运算符是,您可以用C编写++ not ( a < b or b < a ) 您要查找的表达式是: !(a < b || b < a) !(a

我正在尝试实现一个二进制搜索树,我需要一个函数来告诉我树中是否已经存在元素! 然而,我唯一可以使用的运算符是,您可以用C编写++

not ( a < b or b < a )

您要查找的表达式是:

!(a < b || b < a)
!(a
这相当于:

!(a < b) && !(b < a)
!(a
因为和。
完整示例:

#include <iostream>

int main() {
    int a = 2, b = 2;
    if (!(a < b || b < a)) {
        std::cout << "Are equal.";
    }
    else {
        std::cout << "Are not equal.";
    }
}
#包括
int main(){
INTA=2,b=2;
如果(!(astd::cout作为一个例子,您可以为
int
这样做:

bool isEqual(int a, int b)
{
    if((!(a < b)) && (!(b < a)))
       return true;
    return false
}
bool-isEqual(int a,int b)
{
如果((!(a

如果您甚至不能使用
&&
运算符,您可以嵌套If语句。有比需要更多的
()
s,这只是为了使求值顺序更加明显。

您不能保证,因为只有
运算符=b)的实现)
返回“大于或等于”;
其他的
返回“无序到”;
}
给定一些输入,输出可能是无序的

保证两个泛型参数彼此相等的唯一方法是为
运算符==
设置重载

现在,好消息是,如果你正在构建一个二元搜索树,有一个不成文的约定,用于比较的类型至少应该是弱有序的(这意味着
a==b
将返回与
相同的结果!(a
)。因此,在您的特定情况下,只要提供的键值是弱序的,
!(a
在对象相等时将始终返回true

但是,您确实需要一些机制来确保用户不会试图将偏序键传递给比较函数。否则,您将需要一个完整的
操作符==
实现


附言:在有人插嘴说“算术类型呢?”,我想提醒您,对于符合IEEE标准的浮点值,
NaN
存在,其中
a
b
都可以返回false。
a==b
如果
a
b
都是
NaN
,即使这两个
NaN
值具有相同的有效负载,也可以返回false!此外,这个r在两个夸表示中,整数的唯一性是:<强> > C++标准不要求< /强> .< /p>。你只能做2种可能的事情:<代码> a < b < /> >和<代码> b < a /代码>。想想它,如果这两个都不是真的,那么可能的算子重复和严格的弱ORD怎么办?eringIf两个值都不小于另一个,它们必须相等。可以安全地假设提供的
运算符是一些答案。详细解释了我所困惑的一切。谢谢you@Siyavash然后将这一个标记为实际的右侧answer@Xirema浮点数不需要精确相等,也不能保证w也可用于浮点数。
NaN
值可能导致出现
a@Xirema我已经回答了您的评论。请不要重复。在您的代码中,使用
NaN
存储值会导致搜索
2.5
返回存储在
NaN
的值。这不可能是正确的代码。@Xiremau可以向C++标准委员会提出建议,重写基于操作符的所有标准算法。
#include <iostream>

int main() {
    int a = 2, b = 2;
    if (!(a < b || b < a)) {
        std::cout << "Are equal.";
    }
    else {
        std::cout << "Are not equal.";
    }
}
bool isEqual(int a, int b)
{
    if((!(a < b)) && (!(b < a)))
       return true;
    return false
}
std::string compare(T const& a, T const& b) {
    if(a == b) 
        return "Equal to";
    else if(a < b) 
        return "Less than";
    else if(a <= b) 
        return "Less than or Equal to";
    else if(a > b) 
        return "Greater than";
    else if(a >= b) 
        return "Greater than or Equal to";
    else 
        return "Unordered to";
}