diff --git a/src/lib/utility/text/Dictionary.cpp b/src/lib/utility/text/Dictionary.cpp index 035c82b4..b189df41 100644 --- a/src/lib/utility/text/Dictionary.cpp +++ b/src/lib/utility/text/Dictionary.cpp @@ -24,18 +24,17 @@ Id Dictionary::getWordId(const std::string& word) } m_words.emplace(++s_nextId, word); + m_ids.emplace(word, s_nextId); return s_nextId; } Id Dictionary::getWordIdConst(const std::string& word) const { - // TODO: This word lookup is very inefficient, use something smarter like a trie. - for (std::unordered_map::const_iterator it = m_words.begin(); it != m_words.end(); it++) + std::unordered_map::const_iterator it = m_ids.find(word); + + if (it != m_ids.end()) { - if (it->second == word) - { - return it->first; - } + return it->second; } return 0; diff --git a/src/lib/utility/text/Dictionary.h b/src/lib/utility/text/Dictionary.h index 173aae5e..1b116976 100644 --- a/src/lib/utility/text/Dictionary.h +++ b/src/lib/utility/text/Dictionary.h @@ -31,6 +31,7 @@ private: static Id s_nextId; std::unordered_map m_words; + std::unordered_map m_ids; // TODO: replace id lookup to consume less momory e.g. Search Trie std::string m_emptyWord; };