【发布时间】:2017-10-31 06:11:14
【问题描述】:
我想要一个 B-Tree,它可以存储任何类型的数据。甚至可能是自定义对象和数据类型。例如:我可能会存储一些整数、一些字符串(“例如:jack、jill 等)甚至一些自定义对象(MyClass obj1、obj2 等)。
我想知道的是,如何插入/删除/搜索对象并维护 Tree ?我可以将比较操作用于整数,但其他类型,如字符串、自定义对象等呢?
我也想知道,设计课程的最佳方式是什么?我可以想到两个选择:
我使用一个类模板并为每个模板编写专业化。这真的很麻烦,对我来说最不优选。
我使用带有虚拟 get/set 方法的 Tree 节点的抽象基类。每个节点都有一个唯一的整数“键”属性,可用于树操作中的比较。我所有的数据类型都必须从这个类派生。在这种情况下,我可以编写一个 compare() 来比较键。我在这里看到的一个大缺点是密钥的维护,这需要另一个 ds 像堆栈。
请让我知道您对未来最佳方式的意见。提前致谢!!
【问题讨论】:
-
看看
std::set。恕我直言,它显示了如何解决您的问题。注意:要用于键值的数据类型需要哪些运算符。例如。std::set有一个 less 仿函数的模板参数。默认参数是使用operator <作为键的参数。顺便提一句。 AFAIK,std::set在内部使用树。 -
顺便说一句。一些广告:在我对SO: Preorder traversal through Morse code BST 的回答中,我使用了树模板(只是为了好玩)。在这个示例中,我可以将树节点的类模板嵌入到树的类模板中。因此,树节点类模板将成为一个类。我这样做并不是为了不让提问者感到困惑。
标签: c++ data-structures