数据结构- c++二叉搜索树-复杂类型
data structures - C++ Binary Search Tree - Complex Types
我需要为2种类型的对象实现BST;账户和客户。这两种类型都有一个pk(都称为"id")。当我在谷歌上搜索解决方案时,我可以找到大量的BST解决方案,但它们似乎都适用于简单类型,例如BST解决方案可以对整数{1,2,3,4,99,…-但我希望BST解决方案排序复杂的类型/类,基于他们的pk。这是可能的/任何提示?谢谢。
用于构建整数二叉搜索树的逻辑应该立即可推广到其他数据类型。不是在每个节点中存储一个整数作为键,而是在每个字段中存储客户和帐户名称,但是在进行查找时只比较主键。真的应该这么简单。
也就是说,除非这是家庭作业,否则您应该只使用std::map,它具有与二叉搜索树相同的复杂性保证,但是已经为您编写了,广泛可用,并且经过了大量测试。
希望这对你有帮助!
一种方法是修改节点定义,向要存储的对象添加引用并设置索引(在您的示例中为pk),以便对注释进行排序。在使用不同类型时,模板可能会解决:
class Account
{
public:
Account(int k) : pk(k) {};
int pk;
/* ... */
};
template<typename T>
class TreeNode
{
public:
TreeNode(T& the_object) : id(the_object.pk), object(the_object) {};
int id;
T& object;
};
int main () {
Account a(9);
TreeNode<Account> tn(a);
std::cout << tn.id;
}
如果想在树中混合不同的对象类型,另一种方法是定义一个包含pk属性访问器的类,并使帐户和客户在其中,例如:
class Indexable
{
public:
Indexable(int the_pk) : pk(the_pk) {};
int pk;
};
class Account : public Indexable
{
public:
Account(int k) : Indexable(k) {};
/* ... */
};
class TreeNode
{
public:
TreeNode(Indexable& the_object) : id(the_object.pk), object(the_object) {};
int id;
Indexable& object;
};
int main () {
Account a(9);
TreeNode tn(a);
std::cout << tn.id;
}
正如其他答案所指出的,在生产环境中,您可以考虑使用std::map或其他已知的树结构库。
相关文章:
- 如何在<double>矢量中创建复杂类型的模板<T>?
- 将可变参数类型列表的扩展打包为复杂类型的初始值设定项列表 - 合法吗?
- 表达式模板玩具示例:用户定义的强制转换不适用于复杂类型
- 包装一个函数,在 Cython 中返回复杂类型的向量
- 如何修复复杂类型的倍数和铸造
- C++复杂类型的单一方法的模板专用化
- 复杂类型数组的静态初始化
- 如何将c 返回值列表或其他复杂类型的QML列表
- QVECTOR与STD :: VECTER的复杂类型
- 如果输入图像矩阵实际上是复杂类型,MATLAB imresize() 会怎么做?
- C++11中具有C链接的复杂类型
- WSDLPull 使用复杂类型输入
- 基本类型和复杂类型的循环的泛型
- 复杂类型的容器实现
- 基于输入数据创建 STL 向量 - 标量或复杂类型
- C++到C#:PInvoke封送具有复杂类型的回调
- JNI——可以将复杂类型作为本机方法参数传递
- 修改C++ unordered_map中复杂类型的值
- 具有复杂类型的C++模板实例化
- 使用OpenMP的复杂类型