web-dev-qa-db-ja.com

C ++で、std :: vector <string>に特定の値が含まれているかどうかを確認します

私のベクトルに特定の要素が含まれているかどうかを知らせる組み込み関数はありますか?.

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?
62
Jame

次のように std::find を使用できます。

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

std::findを使用できるようにするには:include <algorithm>

151
Darhuuk
  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 にフォールバックします。

29
Alex B

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...";
14
colddie

<algorithm>にあり、std::findという名前です。

5
Nim
4