作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经用 C 实现了红黑树。在 C++ 映射中,可以提供仅执行 value1 < value2 操作的自定义比较。该操作返回 true 或 false,但是如果没有比较操作,树是如何实现的呢?我希望我的比较函数只返回 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
是如何进行的。已实现。注意它如何仅使用 <
来确定何时返回 0 。您的实现可以使用第二个 cmp
执行完全相同的操作。 .
关于c - 红黑树比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467474/
我正在实现红黑 SOR 的并行版本。 我想获得每个进程的最大误差的 MPI_Allreduce 部分不起作用。它永远不会改变,即使只有一个过程,它也会给出高于 2.0 的值。怎么回事?? 这是代码,有
我为拉普拉斯方程(一个简单的加热板问题)在我的红黑 Gauss-Seidel 求解器中添加了 OpenACC 指令,但是 GPU 加速的代码并不比 CPU 快,即使对于大问题也是如此。 我还编写了一个
我是一名优秀的程序员,十分优秀!