c – 使用地图实现Trie

实现Trie数据结构的简便方法是使用std :: map< char,* NodeTrie>.如果我使用它会发生什么错误.我需要序列化和反序列化Trie.因此节点中的每个映射都是AVL树.也许我会有开销?但在地图中我可以更快地搜索,如果我使用列表.

template < typename T >
struct NodeTrie{
    std::map<char,*NodeTrie>`
    bool isWord;
    T & val;
};

最佳答案 我喜欢你的主意.尝试是重要的数据结构,我对map<> s作为有效容器感到愉快.

只是一些评论:如果您的编译器支持它,您可以避免浪费内存,为每个节点单独分配.

template< typename T >
struct NodeTrie {
    NodeTrie(const T& val = T(), bool isWord = bool() ) : val(val), isWord(isWord) {}

    std::map<char, NodeTrie> span;
    T val;
    bool isWord;
};

要以这种方式使用:

int main() {
    typedef NodeTrie<int> iTree;
    iTree t(0);
    t.span['a'] = iTree(3);
    ...
}

另外,我将val成员更改为可复制的构造对象:在这里使用引用似乎对我来说是错误的设计…

点赞