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

时间:2019-02-04 00:13:24

标签: c++

我想知道如何检查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;

2 个答案:

答案 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;
        }
    }