红黑树比较函数
Red black tree comparison function
我已经在 C 中实现了红黑树。在 C++ 映射中,可以提供仅执行操作 value1 < value2 的自定义比较。这个操作returns true or false 但是没有比较操作的树是怎么实现的呢?我希望我的比较函数 return 只有 1 或 0,没有任何 == 运算符。我试图在 stl 中阅读它,但代码不可读,尽管我有 C++ 经验。
不需要完整代码,因为它与所有其他树实现的代码相同。目前有以下比较功能:
int cmp(void *key1, void *key2){
if(*(int*)key1 < *(int*)key2){
return 1;
}else if(*(int*)key1 > *(int*)key2){
return -1;
}else{
return 0;
}
}
我想要这样的比较功能:
int cmp(void *key1, void *key2){
if(*(int*)key1 < *(int*)key2){
return 1;
}else{
return 0;
}
}
我不明白搜索是如何使用这个比较函数的,因为在找到节点时没有停止条件。
你可以用严格不等式来表达相等:
(a == b) <==> !(a < b || b < a)
等价假设比较关系是严格的全序。这是 C++ 比较类型所要求的,也是您在树实现中必须从比较函数中要求的。
就你的二叉树搜索而言,看看第一个cmp
是如何实现的。注意它如何仅使用 <
找出何时 return 0。您的实现可以使用第二个 cmp
.
做完全相同的事情
我已经在 C 中实现了红黑树。在 C++ 映射中,可以提供仅执行操作 value1 < value2 的自定义比较。这个操作returns true or false 但是没有比较操作的树是怎么实现的呢?我希望我的比较函数 return 只有 1 或 0,没有任何 == 运算符。我试图在 stl 中阅读它,但代码不可读,尽管我有 C++ 经验。
不需要完整代码,因为它与所有其他树实现的代码相同。目前有以下比较功能:
int cmp(void *key1, void *key2){
if(*(int*)key1 < *(int*)key2){
return 1;
}else if(*(int*)key1 > *(int*)key2){
return -1;
}else{
return 0;
}
}
我想要这样的比较功能:
int cmp(void *key1, void *key2){
if(*(int*)key1 < *(int*)key2){
return 1;
}else{
return 0;
}
}
我不明白搜索是如何使用这个比较函数的,因为在找到节点时没有停止条件。
你可以用严格不等式来表达相等:
(a == b) <==> !(a < b || b < a)
等价假设比较关系是严格的全序。这是 C++ 比较类型所要求的,也是您在树实现中必须从比较函数中要求的。
就你的二叉树搜索而言,看看第一个cmp
是如何实现的。注意它如何仅使用 <
找出何时 return 0。您的实现可以使用第二个 cmp
.