Check if element is in the list (contains)

后端 未结 7 1917
南笙
南笙 2021-01-31 14:38

I\'ve got a list of elements, say, integers and I want to check if my variable (another integer) is one of the elements from the list. In python I\'d do:

my_list         


        
相关标签:
7条回答
  • 2021-01-31 15:08

    A one-liner solution, similar to python, would be (std::set<int> {1, 2, 3, 4}).count(my_var) > 0.

    Minimal working example

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

    prints true or false dependent of the value of my_var.

    0 讨论(0)
  • 2021-01-31 15:12

    Declare additional helper function like this:

    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;
    }
    

    And use it like this:

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

    Snapshot of example can be found here:

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

    0 讨论(0)
  • 2021-01-31 15:16

    std::list does not provide a search method. You can iterate over the list and check if the element exists or use std::find. But I think for your situation std::set is more preferable. The former will take O(n) time but later will take O(lg(n)) time to search.

    You can simply use:

    int my_var = 3;
    std::set<int> mySet {1, 2, 3, 4};
    if(mySet.find(myVar) != mySet.end()){
          //do whatever
    }
    
    0 讨论(0)
  • 2021-01-31 15:24

    you must #include <algorithm>, then you can use std::find

    0 讨论(0)
  • 2021-01-31 15:24

    They really should add a wrapper. Like this:

    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) )
        {
    
        }
    
    0 讨论(0)
  • 2021-01-31 15:25

    You can use std::find

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

    You need to include <algorithm>. It should work on standard containers, vectors lists, etc...

    0 讨论(0)
提交回复
热议问题