How to check that an element is in a std::set?

前端 未结 10 1954
春和景丽
春和景丽 2020-11-30 17:13

How do you check that an element is in a set?

Is there a simpler equivalent of the following code:

myset.find(x) != myset.end()
相关标签:
10条回答
  • 2020-11-30 17:31

    //general Syntax

           set<int>::iterator ii = find(set1.begin(),set1.end(),"element to be searched");
    

    /* in below code i am trying to find element 4 in and int set if it is present or not*/

    set<int>::iterator ii = find(set1.begin(),set1.end(),4);
     if(ii!=set1.end())
     {
        cout<<"element found";
        set1.erase(ii);// in case you want to erase that element from set.
     }
    
    0 讨论(0)
  • 2020-11-30 17:32

    In C++20 we'll finally get std::set::contains method.

    #include <iostream>
    #include <string>
    #include <set>
    
    int main()
    {
        std::set<std::string> example = {"Do", "not", "panic", "!!!"};
    
        if(example.contains("panic")) {
            std::cout << "Found\n";
        } else {
            std::cout << "Not found\n";
        }
    }
    
    0 讨论(0)
  • 2020-11-30 17:39

    The typical way to check for existence in many STL containers such as std::map, std::set, ... is:

    const bool is_in = container.find(element) != container.end();
    
    0 讨论(0)
  • 2020-11-30 17:42

    Just to clarify, the reason why there is no member like contains() in these container types is because it would open you up to writing inefficient code. Such a method would probably just do a this->find(key) != this->end() internally, but consider what you do when the key is indeed present; in most cases you'll then want to get the element and do something with it. This means you'd have to do a second find(), which is inefficient. It's better to use find directly, so you can cache your result, like so:

    auto it = myContainer.find(key);
    if (it != myContainer.end())
    {
        // Do something with it, no more lookup needed.
    }
    else
    {
        // Key was not present.
    }
    

    Of course, if you don't care about efficiency, you can always roll your own, but in that case you probably shouldn't be using C++... ;)

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