我有一個std::vector<std::string>有 43,000 個字典單詞的。我有大約 315,000 個可能的詞,對于每個詞,我需要確定它是否是一個有效詞。這需要幾秒鐘,我需要盡快完成任務。
有關完成此操作的最佳方法的任何想法?目前我對每次嘗試進行迭代:
for (std::string word : words) {
if (!(std::find(dictionary.begin(), dictionary.end(), word) != dictionary.end())) {
// The word is not the dictionary
return false;
}
}
return true;
有沒有更好的方法來迭代多次?我有一些假設,例如
- 創建無效詞的快取,因為 315,000 串列可能有 25% 的重復
- 只與相同長度的單詞比較
有一個更好的方法嗎?我對演算法或想法感興趣。
uj5u.com熱心網友回復:
有沒有更好的方法來迭代多次?
是的。將向量轉換為另一種支持更快查找的資料結構。標準庫附帶std::set和std::unordered_set,它們都可能比重復線性搜索更快。其他資料結構可能更有效。
如果您的目標是在 may 集合中創建一系列單詞或非單詞,那么另一種有效的方法是對兩個向量進行排序,并使用std::(ranges::)set_intersectionor std::(ranges::)set_difference。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363640.html
