尝试使用map实现

Trie implementation with using map

本文关键字:map 实现      更新时间:2023-10-16

使用std::map<char,*NodeTrie>是实现Trie数据结构的简单方法。如果我使用它会发生什么错误。我需要序列化和反序列化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成员更改为可复制构造对象:在这里使用引用对我来说似乎是错误的设计…

仅供参考,GNU libc++在其基于策略的数据结构库中已经有了一个trie模板。你可以像这样使用它:

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>
using namespace std;
using namespace pb_ds;
trie <string, int> myTrie;

关于使用此类的一些示例,您可以参考。