簡體   English   中英

如何多次快速搜索大向量?

[英]How to quickly search a large vector many times?

我有一個包含 43,000 個字典單詞的std::vector<std::string> 我有大約 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% 的重復項
  • 只比較相同長度的單詞

有一個更好的方法嗎? 我對算法或想法感興趣。

有沒有更好的方法來迭代多次?

是的。 將向量轉換為另一個支持更快查找的數據結構。 標准庫帶有std::setstd::unordered_set ,它們都可能比重復線性搜索更快。 其他數據結構可能更有效。

如果您的目標是在可能的集合中創建一系列單詞或非單詞,那么另一種有效的方法是對兩個向量進行排序,並使用std::(ranges::)set_intersectionstd::(ranges::)set_difference

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM