2013-10-16 117 views
1

我有一個字符串列表,並且必須查找字符串是否存在於該列表中。我想在低延遲定價引擎中使用邏輯,所以我想要有真正的快速邏輯。 我以爲有這些字符串存儲在地圖作爲關鍵,然後可以使用find()或count()函數爲相同。 任何人都可以提出任何其他更有效的邏輯相同?從字符串列表中找到最快的字符串

回答

2

很可能std::unordered_set是一個適合您需要的選擇。然後您將使用find()來檢查字符串是否存在。有點像example code here

#include <iostream> 
#include <string> 
#include <unordered_set> 

int main() { 

    std::unordered_set<std::string> myset{ "red", "green", "blue" }; 

    std::cout << "color? "; 
    std::string input; 
    std::cin >> input; 

    auto pos = myset.find(input); 

    if (pos != myset.end()) 
    std::cout << *pos << " is in myset\n"; 
    else 
    std::cout << "not found in myset\n"; 

} 

要了解std::unordered_set是如何工作的,請參閱hash set

+0

是阿里,我的代碼是C++代碼。我剛剛添加了邏輯的僞代碼。 –

+0

這100%回答了我的問題。我也發現我的strfind()方法也沒有效率......因爲它的傳統C處理方式比較慢。 –

+0

@BhupeshPant好的,我很高興它有幫助。我已經添加了一些示例代碼。 – Ali

-1

還有一個辦法,我剛纔想到的是,

把字符串列表單分號分隔字符串,然後使用strfind。

例如

List of string, <ABC,DEF,GHI,JKL,MNO,PQRS,LMNOPQR, STUVW,XY,Z> 
l_czEIDHolder = 「ABC;DEF;GHI;JKL;MNO;PQRS;LMNOPQR; STUVW;XY;Z」 
if string_to_search = 「PQRS」 
make string_to_search = string_to_search +」;」 
strfind(czEIDHolder, string_to_search) OR 
string::find(czEIDHolder, string_to_search) 
+0

-1令人費解的解決方案。如果您的搜索字符串包含您建議的分隔符(分號),則失敗。另外,由於你要求*快*,*慢*不是答案(O(1)對O(n))。 – IInspectable

+0

爲此,我確信它不會包含該分隔符。我只會把你的第二點(-1)..謝謝你的回覆。 –

+0

如果您的搜索字符串與尾部匹配(但不是整個字符串),也會失敗。這不是一個解決方案。 – IInspectable

相關問題