整数などの要素のリストがあり、変数(別の整数)がリストの要素の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++でどのようにすればいいのか分かりません。
std::find
を使用できます
bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());
<algorithm>
を含める必要があります。標準のコンテナ、ベクターリストなどで動作するはずです...
_std::list
_は検索メソッドを提供しません。リストを反復処理して、要素が存在するかどうかを確認するか、_std::find
_を使用できます。しかし、あなたの状況では_std::set
_の方が望ましいと思います。前者は検索にO(n)
時間かかりますが、後でO(lg(n))
時間かかります。
次を使用できます。
_if(mySet.find(myVar) != mySet.end()){
//do whatever
}
_
絶対です #include <algorithm>
、次に使用できます std :: find
彼らは本当にラッパーを追加する必要があります。このような:
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) )
{
}
つかいます std::find
、 何かのようなもの:
if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list))
// my_list has my_var
次のような追加のヘルパー関数を宣言します。
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);
}
例のスナップショットはここにあります: