95

是否有任何内置函数告诉我我的向量是否包含某个元素,例如

std::vector<string> v;
v.push_back("abc");
v.push_back("xyz");

if (v.contains("abc")) // I am looking for one such feature, is there any
                       // such function or i need to loop through whole vector?
4

5 回答 5

208

您可以std::find按如下方式使用:

if (std::find(v.begin(), v.end(), "abc") != v.end())
{
  // Element in vector.
}

为了能够使用std::findinclude <algorithm>

于 2011-06-08T10:59:50.757 回答
40
  1. 如果您的容器仅包含唯一值,请考虑std::set改用。它允许查询具有对数复杂度的集合成员。

     std::set<std::string> s;
     s.insert("abc");
     s.insert("xyz");
     if (s.find("abc") != s.end()) { ...
    
  2. 如果您的向量保持排序,请使用std::binary_search,它也提供对数复杂度。

  3. 如果一切都失败了,则回退到std::find,这是一个简单的线性搜索。

于 2011-06-08T11:00:54.797 回答
22

在 C++11 中,您可以std::any_of改用。

查找数组中是否有任何零的示例:

std::array<int,3> foo = {0,1,-1};
if ( std::any_of(foo.begin(), foo.end(), [](int i){return i==0;}) )
std::cout << "zero found...";
于 2013-02-27T03:34:18.630 回答
6

它在<algorithm>并被调用std::find

于 2011-06-08T10:58:48.793 回答
3

std::find().

于 2011-06-08T10:59:01.237 回答