C++ C++;二叉搜索树-复杂类型

C++ C++;二叉搜索树-复杂类型,c++,data-structures,binary-search-tree,C++,Data Structures,Binary Search Tree,我需要为2种类型的对象实现一个BST;帐户和客户。这两种类型都有一个pk(都称为“id”)。 当我搜索一个解决方案时,我可以找到大量的BST解决方案,但它们似乎都适用于简单类型,例如,BST解决方案可以对{1,2,3,4,99,…999}等整数进行排序,但我希望BST解决方案能够根据复杂类型/类的pk对其进行排序。这可能吗/有什么建议吗?谢谢。用于构建整数二元搜索树的逻辑应该可以立即推广到其他数据类型。与其在每个节点中存储一个整数作为键,不如在每个字段中存储您的客户和帐户名称,但在进行查找时,只

我需要为2种类型的对象实现一个BST;帐户和客户。这两种类型都有一个pk(都称为“id”)。
当我搜索一个解决方案时,我可以找到大量的BST解决方案,但它们似乎都适用于简单类型,例如,BST解决方案可以对{1,2,3,4,99,…999}等整数进行排序,但我希望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;
}
类帐户
{
公众:
账户(INTK):pk(k){};
int-pk;
/* ... */
};
模板
三烯类
{
公众:
TreeNode(T&the_object):id(the_object.pk),object(the_object){};
int-id;
T&object;
};
int main(){
账户a(9);
TreeNode-tn(a);

std::cout为什么不直接使用
std::map
(或类似的)?如果这是家庭作业,也许模板会有所帮助。否则,为什么不按照奥利的建议使用std::map或std::multimap呢?您实际上想要完成的是什么?为什么是BST?
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;
}