如何通过自定义选择底层容器来创建树结构

How to make tree structure with custom selection of underlying container?

本文关键字:创建 结构 何通过 自定义 选择      更新时间:2023-10-16

我试图制作一个模板化的Trie结构。它表示内部私有结构Node中的树,其中包含TElembool,表示该特定节点是终端和子节点的向量:

template<typename TElem>
class Trie
{
    // ...
private:
    struct Node
    {
        TElem elem;
        bool isTerminal;
        std::vector<std::shared_ptr<Node>> children;
    };
    Node root_;
};

现在我想制作另一个模板参数,它可以选择另一个下属容器,例如list。如何做到这一点?

使用模板模板参数(未经测试的代码,但总体思路应该可以):

template <typename TElem, 
          template <typename, typename> class Cont
          template <typename> class Allocator=std::allocator>
class Trie {
 private:
    struct Node
    {
        typedef std::shared_ptr<Node> NodePtr_;
        TElem elem;
        bool isTerminal;
        Cont<NodePtr_, Allocator<NodePtr_>> children;
    };
    Node root_;
};

然后

Trie<int, std::list> myTrie = ....;