使用std :: find()搜索多个元素

时间:2016-02-15 04:30:52

标签: c++ vector find std

是否可以使用std::find()通过1次调用搜索多个元素?示例:std::find(vector.begin(), vector.end(), 0&&1&&D)

由于

4 个答案:

答案 0 :(得分:5)

您无法使用std::find。假设0&&1&&D是三个值的列表,并且您试图在向量中找到具有任何这些值的元素,您可以使用:

  • std::find_if带有谓词(lambda可能最简单,例如[](const T& x) { return x == 0 || x == 1 || x == d; },其中Tvector所持有的任何类型,或

  • std::find_first_of(链接页面有一个很好的例子)。

答案 1 :(得分:3)

std::for_each可能适合您。

std::for_each(vector.begin(),
              vector.end(),
              [](auto& item) -> void {if (item == <xxx> ) { /* Use the item */ });

您在评论中提到:

  

这可能是一个单独的问题,但如果某些元素存在,我可以使用一种方法在向量中搜索吗?

std::any_of就是这个功能。

bool found = std::any_of(vector.begin(),
                         vector.end(),
                         [](auto& item) -> bool { return item == <xxx>; });

答案 2 :(得分:2)

C++ Reference非常明确地说明了这一点:

  

比较等于val的范围内第一个元素的迭代器。   如果没有元素匹配,则函数返回last。“

所以只用一个函数调用就无法做到。

答案 3 :(得分:0)

如果您需要三个值相邻,那么自己实施find()可能是最简单的方法:

template <class Iterator, class T>
Iterator find_by_three_values(Iterator first, Iterator last, T value1, T value2, T value3)
{
    for (; first != last; ++first) {
        if (*first == value1
            && first + 1 != last && *(first + 1) == value2
            && first + 2 != last && *(first + 2) == value3) {
            return first;
        }
    }
    return last;
}