【问题标题】:Need some help with C++ Trie data structures在 C++ Trie 数据结构方面需要一些帮助
【发布时间】:2023-08-15 09:11:01
【问题描述】:

我正在尝试编写一个匹配字符串是否存在于字典中的 C++ 函数。它可以是部分字符串或完整字符串。所以我把每一行都读成了一个 trie

           trie< std::string, int > dict;
           dict.insert(make_pair(line,i++));
            // when i search for a string it always returns invalid.
           if(dict.find("AA")!=dict.end())
               cout<<valid<<endl;
           else
               cout<<invalid<<endl;

有人可以帮我解决这个问题吗?我添加了用于阅读字典中的单词的代码。

if(myfile.is_open())
{

      int i=0;
  string line;

      cout<<dict.size()<<endl;
      while(!myfile.eof())
  {
      getline(myfile,line);
      dict.insert(make_pair(line,i++));



  }
 } 

【问题讨论】:

  • 如果不知道必要的声明和变量,这个问题是不可能合理回答的
  • @aaa 我使用 getline 读取一行,我检查了 dict 的大小,发现它是 179000。使用 dict.find 后,我使用它检查它返回的内容 = dict.find(" AA"); (*it).second 的值返回 23880300
  • 家庭作业?无论如何,这个问题是无法回答的——你应该清楚地说明你想要什么。在我看来,你已经做了你想做的事。
  • 你使用的是什么实现的 trie。
  • @jpalecek。不,这不是在家工作。没有人会要求在家庭作业中使用 GNU trie

标签: c++ trie


【解决方案1】:

如果您使用this triethis sample code 表示您需要在声明中使用更多模板参数来告诉它如何拆分键,以便它可以进行 trie 索引,尤其是前缀搜索:

trie< std::string, int, string_trie_e_access_traits<>, pat_trie_tag, trie_prefix_search_node_update> dict;

还要注意链接示例代码中搜索功能中prefix_range的使用。

【讨论】: