我有一個字符串前綴數組:std::vector<std::string> haystack = {"/bin/", "/usr/bin/", "/usr/local/bin/"}
。C++:高效地在子字符串數組中找到一個字符串
有沒有一種有效的方法來找到std::string needle = "/bin/echo"
開頭的子字符串從haystack
,使用標準的C++庫?
如果我需要找到完全匹配,我可以使用std::set<std::string>
,這將執行一個有效的二進制搜索,但是我只需要匹配字符串的第一部分,所以目前我正在使用一個簡單的循環:
for (auto it = haystack.begin(); it != haystack.end(); it++) {
if (needle.compare(0, it->size(), *it) == 0) {
return true; // Found it
}
}
return false;
請定義_efficient_。爲了縮短代碼,有'std :: find_if()'。 –
比遍歷整個'haystack'數組更快,這將是'O(n)'。 'find_if'將執行與'O(n)'速度完全相同的循環。 – pelya
分而治之。但即使這樣也不能保證比O(n)更快。 –