how to find the intersection of two std::set in C++?

后端 未结 5 1133
我寻月下人不归
我寻月下人不归 2020-12-04 10:43

I have been trying to find the intersection between two std::set in C++, but I keep getting an error.

I created a small sample test for this

#include         


        
5条回答
  •  隐瞒了意图╮
    2020-12-04 11:09

    Just comment here. I think it is time to add union, intersect operation to the set interface. Let's propose this in the future standards. I have been using the std for a long time, each time I used the set operation I wished the std were better. For some complicated set operation, like intersect, you may simply (easier?) modify the following code:

    template 
      OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
                                       InputIterator2 first2, InputIterator2 last2,
                                       OutputIterator result)
    {
      while (first1!=last1 && first2!=last2)
      {
        if (*first1<*first2) ++first1;
        else if (*first2<*first1) ++first2;
        else {
          *result = *first1;
          ++result; ++first1; ++first2;
        }
      }
      return result;
    }
    

    copied from http://www.cplusplus.com/reference/algorithm/set_intersection/

    For example, if your output is a set, you can output.insert(*first1). Furthermore, you function may not be templated.If you code can be shorter than using the std set_intersection function then go ahead with it.

    If you want to do a union of two set you can simply setA.insert(setB.begin(), setB.end()); This is much simpler than the set_union method. However, this will not work with vector.

提交回复
热议问题