2010-08-05 6 views
1

Я пытаюсь написать функцию C++, которая соответствует тому, присутствует ли строка в словаре. Это может быть частичная строка или полная строка. Я прочитал каждую строку в trieНужна помощь в структурах данных 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++)); 



    } 
} 
+0

этот вопрос невозможно ответить разумно, не зная необходимых деклараций и переменных – Anycorn

+0

@aaa Я использовал getline для чтения строки, и я проверил размер dict и нашел, что это 179000. После использования dict.find я проверяю, что это возвращает с помощью it = dict.find («AA»); значение (* it). секунд возвращается как 23880300 – brett

+0

Домашнее задание? Во всяком случае, вопрос неопровержимый - вы должны четко заявить, что хотите. Мне кажется, вы уже сделали то, что хотите. – jpalecek

ответ

0

Если вы используете this trie, this sample code указывает вам нужно больше параметров шаблона в вашем объявлении, чтобы сказать ему, как разделить ключи, чтобы он мог сделать TRIE индексации и особенно префикс поиска:

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

Также обратите внимание на использование prefix_range в функции поиска в соответствующем примере кода.

Смежные вопросы