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::find: include <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 に答える