我正在为二进制搜索树编写类似STL的容器。我有Tree本身的模板类和嵌套类TreeNode
我的问题是我应该把二进制谓词函数放在哪里来计算密钥 - 进入树类或进入Node类?如果我决定将它放在Tree类中,我的所有节点都不会知道如何比较它们的键:(
如果在Node类中,我应该将此函数设置为静态吗?
答案 0 :(得分:1)
应该在节点内存储的值之间进行比较,而不是在节点本身之间进行比较。因此,你不需要在任何一个建议的位置使用比较器。你可以将比较器类作为树(和节点)的模板化参数,或者只是依靠默认值来比较节点中保存的值。
答案 1 :(得分:1)
很明显,你不能把它变成静态的 - 如果你这样做了,那么两个不同的树有两个不同的比较函数就不会起作用(后者会覆盖全局)。
很明显它不应该是每个节点 - 你会复制完全相同的功能,每个节点有一个内存命中,没有任何理由 - 一棵树中的所有节点都有相同的比较器。 / p>
所以最好的选择是让它成为容器的一部分。至于你的反对意见,节点无法比较自己,为什么这很重要?您将比较两个节点的唯一时间是在容器上的操作的上下文中,在这种情况下,您可以使用比较器对象。