gpt4 book ai didi

c++ - 如何检查 vector 是否具有以特定字符串开头的元素

转载 作者:太空狗 更新时间:2023-10-29 21:10:23 28 4
gpt4 key购买 nike

我想知道如何检查 vector 是否包含以特定字符串开头的元素。

我用下面的 C# 代码完成了这项工作。但是我如何在 C++ 中执行此操作。

if (Array.Exists(words, word => word.StartsWith("abc")))
{
Console.WriteLine("Exists");
}

[编辑]我尝试使用下面的代码,但我认为当 vector 很大时这是肮脏的解决方案。(我的 vector 有超过 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;

最佳答案

可以使用 <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;
});

关于c++ - 如何检查 vector 是否具有以特定字符串开头的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54508865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com