在C ++中检查std :: vector <string>是否包含某个值</string>

时间:2011-06-08 10:57:24

标签: c++ vector std stdvector

是否有任何内置函数告诉我我的向量包含某个元素 e.g。

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?

5 个答案:

答案 0 :(得分:149)

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

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

能够使用std::findinclude <algorithm>

答案 1 :(得分:28)

  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,这是一个简单的线性搜索。

答案 2 :(得分:13)

在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...";

答案 3 :(得分:5)

它位于<algorithm>并被称为std::find

答案 4 :(得分:4)