【问题标题】:A little problem with BST implementationBST实现的一个小问题
【发布时间】:2010-11-25 01:27:09
【问题描述】:

我正在为二叉搜索树编写类似 STL 的容器。我有 Tree 本身的模板类和嵌套类 TreeNode。
我的问题是我应该将比较键的二元谓词函数放在哪里 - 放入树类或节点类?如果我决定将它放在 Tree 类中,我的所有节点都不知道如何比较它们的键:(
如果在 Node 类中,我应该将此函数设为静态吗?

【问题讨论】:

    标签: c++ binary-tree


    【解决方案1】:

    应该在存储在节点内的值之间进行比较,而不是在节点本身之间进行比较。因此,您在建议的任何一个地方都不需要比较器。您可以将比较器类作为树(和节点)的模板参数,或者在比较节点中保存的值时仅依靠默认值来工作。

    【讨论】:

      【解决方案2】:

      很明显,您不能将其设为静态 - 如果您这样做了,那么具有两个不同比较函数的两棵不同的树将无法工作(后者会覆盖全局)。

      同样清楚的是,它不应该是每个节点 - 您将无缘无故地复制完全相同的功能,每个节点都会有内存命中 - 单个树中的所有节点都将具有相同的比较器。

      所以最好的选择是让它成为容器的一部分。至于您反对节点无法比较自己,这有什么关系?唯一一次比较两个节点是在容器操作的上下文中,在这种情况下,您可以方便地使用比较器对象。

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 1970-01-01
        • 2020-06-07
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多