检查元素是否在列表中(包含)

duc*_*cin 34 c++ contains

我有一个元素列表,比如整数,我想检查我的变量(另一个整数)是否是列表中的元素之一.在python我会做:

my_list = [1,2,3,4] # elements
my_var = 3 # my variable
my_var in my_list # returns boolean
Run Code Online (Sandbox Code Playgroud)

如何在C++中做到这一点?我想过使用std::list,但我找不到任何find方法.我可以在std::set结构中看到这样的方法.

更深层次的问题是,我的程序被赋予了一些唯一的ID(列表,集合,等等),我迭代了一长串输入数据(id)并检查它们是否包含在列表中(返回的布尔值为每个迭代步骤).而且我不确定我应该如何在C++中这样做.

Mat*_*tzi 64

您可以使用 std::find

bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());
Run Code Online (Sandbox Code Playgroud)

你需要包括<algorithm>.它应该适用于标准容器,矢量列表等...

  • ..一如既往地与C++协调.谁需要一个像`contains()`这样简单的方法?! (62认同)
  • 我觉得添加对C#风格扩展方法的支持可以轻松解决我对C++所做的每一个抱怨. (5认同)
  • c++ 解决方案像往常一样是灾难性的。 (4认同)

Rak*_*kib 17

std::list不提供搜索方法.您可以遍历列表并检查元素是否存在或使用std::find.但我认为对你的情况std::set更为可取.前者需要O(n)时间,但后来需要O(lg(n))时间来搜索.

你可以简单地使用:

if(mySet.find(myVar) != mySet.end()){
      //do whatever
}
Run Code Online (Sandbox Code Playgroud)

  • `myset.count(myVar)!= 0`可能更可取 (2认同)

Kun*_*hoo 9

他们确实应该添加一个包装纸。像这样:

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) )
    {

    }
Run Code Online (Sandbox Code Playgroud)


Rad*_*ivu 5

您必须先#include <algorithm>使用std :: find


Mar*_*hke 5

类似于 python 的单行解决方案是(std::set<int> {1, 2, 3, 4}).count(my_var) > 0.

最小工作示例

int my_var = 3;
bool myVarIn = (std::set<int> {1, 2, 3, 4}).count(my_var) > 0;
std::cout << std::boolalpha << myVarIn << std::endl;
Run Code Online (Sandbox Code Playgroud)

打印truefalse取决于 my_var 的值。