我想知道如何检查vector是否具有以特定字符串开头的元素。
我用下面的C#代码做到了这一点。 但是我该如何在C ++中做到这一点。
if (Array.Exists(words, word => word.StartsWith("abc")))
{
Console.WriteLine("Exists");
}
[编辑] 我在下面的代码中尝试过,但是当矢量很大时,我认为这是肮脏的解决方案。 (我的向量的元素超过400000) 有更好的解决方案吗?
vector<string> words;
bool hasValue = false;
words.push_back("abcdef");
words.push_back("bcdef");
words.push_back("fffewdd");
for (string& word : words)
{
if (word.find("abc") == 0)
{
hasValue = true;
break;
}
}
cout << hasValue << endl;
答案 0 :(得分:2)
使用<algorithm>
可以获得更精致的解决方案。
std::string strToBeSearched = "abc";
bool found = std::any_of(words.begin(), words.end(), [&strToBeSearched](const std::string &s) {
return s.substr(0, strToBeSearched.size()) == strToBeSearched;
});
更新:
您也可以使用find()
。像这样:
std::string strToBeSearched = "abc";
bool found = std::any_of(words.begin(), words.end(), [&strToBeSearched](const std::string &s) {
return s.find(strToBeSearched) == 0;
});
更新2 :
@SidS正确建议,您也可以使用rfind()
以获得更好的性能。
std::string strToBeSearched = "abc";
bool found = std::any_of(words.begin(), words.end(), [&strToBeSearched](const std::string &s) {
return s.rfind(strToBeSearched, 0) == 0;
});
答案 1 :(得分:1)
您的解决方案很好。
使用string::rfind()
可能会更高效,因为string::find()
可能会搜索整个字符串:
for (const auto &word : words)
{
if (!word.rfind("abc", 0))
{
hasValue = true;
break;
}
}