web-dev-qa-db-ja.com

要素がリストに含まれているかどうかを確認します(含む)

整数などの要素のリストがあり、変数(別の整数)がリストの要素の1つであるかどうかを確認したいと思います。 In python私がやる:

my_list = [1,2,3,4] # elements
my_var = 3 # my variable
my_var in my_list # returns boolean

C++でそれを行う方法は?私はstd::listが、findメソッドが見つかりません。このようなメソッドはstd::set構造。

さらに深く、問題は私のプログラムにいくつかの一意のID(リスト、セットなど)が与えられ、入力データ(ID)の長いリストを反復処理し、それらがリストに含まれているかどうかをチェックすることです(ブール値各反復ステップ)。そして、私はそれをC++でどのようにすればいいのか分かりません。

31
ducin

std::findを使用できます

bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());

<algorithm>を含める必要があります。標準のコンテナ、ベクターリストなどで動作するはずです...

57
Matzi

_std::list_は検索メソッドを提供しません。リストを反復処理して、要素が存在するかどうかを確認するか、_std::find_を使用できます。しかし、あなたの状況では_std::set_の方が望ましいと思います。前者は検索にO(n)時間かかりますが、後でO(lg(n))時間かかります。

次を使用できます。

_if(mySet.find(myVar) != mySet.end()){
      //do whatever
}
_
17
Rakib

絶対です #include <algorithm>、次に使用できます std :: find

4
Radu Chivu

彼らは本当にラッパーを追加する必要があります。このような:

namespace std
{
    template<class _container,
        class _Ty> inline
        bool contains(_container _C, const _Ty& _Val)
        {return std::find(_C.begin(), _C.end(), _Val) != _C.end(); }
};
...
    if( std::contains(my_container, what_to_find) )
    {

    }
2
KungPhoo

つかいます std::find、 何かのようなもの:

if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list))
    // my_list has my_var
1
Paul Evans

次のような追加のヘルパー関数を宣言します。

template <class T, class I >
bool vectorContains(const vector<T>& v, I& t)
{
    bool found = (std::find(v.begin(), v.end(), t) != v.end());
    return found;
}

そして、次のように使用します:

void Project::AddPlatform(const char* platform)
{
    if (!vectorContains(platforms, platform))
        platforms.Push_back(platform);
}

例のスナップショットはここにあります:

https://github.com/tapika/cppscriptcore/blob/b7f3d62747494a52a440482e841ffb016a3fc56e/SolutionProjectModel/Project.cpp#L1

0
TarmoPikaro