Trie实现地图

Giu*_*ppe 4 c++ dictionary trie data-structures

我今天正在解决一个问题.但我被困了.我知道trie是如何工作的,但问题是我知道如何使用静态数组和类来实现它.今天在网上冲浪我读到有一种方法可以使用stl :: map实现尝试.我今天试过,但我还是不知道如何在int上插入元素.这个结构.

编辑1:我正在尝试解决这个问题:spoj.com/problems/TAP2012D我想知道如何使用edit2将单词添加到trie中:我知道地图是如何工作的,我只是不知道如何使用地图作品.我想要一个了解尝试的人.

这是我到目前为止所做的

const int ALPH_SIZE = 26;
using namespace std;

struct trie{
    map<char,int> M;
    int x,y;
    trie();
};

trie T[1000000];


trie::trie()
{
    x=y=0;
}
int maximo;


void addtrie(string palabra)
{
    int tam=palabra.size();
    int pos=0;
    for(int i=0;i<tam;i++)
    {
        if(T[pos].M.find(palabra[i])==T[pos].M.end())
        {
            T[pos].M[palabra[i]]=new trie();
            T[pos].M[palabra[i]]=
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

saa*_*ame 6

特里节点存储现有输出字符的映射以及指示该节点是否对应于特里结构中的字的标志.

struct Node
{   map<char, Node*> a;
    bool flag;

    Node() { flag = false; }
};
Run Code Online (Sandbox Code Playgroud)

现在插入类似于您使用静态数组所做的操作,除了您在此处使用地图.

void insert(Node *x, string s)
{   for(int i = 0; i < s.size(); i++)
    {   if(x->a.count(s[i]) == 0)
        /* no outgoing edge with label = s[i] so make one */
        {   x->a[ s[i] ] = new Node;
        }
        x = x->a[ s[i] ];
    }
    x->flag = true; /* new word */
}
Run Code Online (Sandbox Code Playgroud)