如何使用自定义选择底层容器来创建树结构?

时间:2012-08-03 10:54:51

标签: c++ templates

我尝试制作模板化的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。怎么办呢?

1 个答案:

答案 0 :(得分:2)

使用模板模板参数(未经测试的代码,但一般的想法应该没问题):

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 = ....;