mat*_*ekm 6 c++ stl set-intersection
有没有办法在两种不同类型的集合上执行std :: set_intersection?
我有两套:
std::set<X1> l_set1;
std::set<X2> l_set2;
我能够为它们定义一些比较器来检查X1和X2是否相等.
struct sample_comparer
{
    bool operator()(const &X1 p_left, const &X2 p_right)
    {
        return p_left == p_right;
    }
};
现在,我尝试在这两组上进行集合交集:
std::set<X1> l_intersect;
std::set_intersection(l_set1.begin(), l_set1.end(), l_set2.begin(), l_set2.end(),
                      std::inserter(l_intersect, l_intersect.begin()), sample_comparer());
不幸的是,我无法强制使用此代码.我甚至不确定这是否可行,但是从set_intersection 的描述我知道我可以使用两个不同的迭代器.
我试图搜索一些我想要的代码示例,但没有找到任何代码示例?有人可以向我提供我的问题的工作代码示例吗?
更新:错误是:
错误:stl_function.h:227:'__ x <__y'中的'operator <'不匹配
提前致谢!
PlasmaHH 的评论可能就是问题所在。
像 set_intersection 这样的函数的工作方式是首先执行:a < b然后b < a
因此,ample_comparer 需要能够比较两种方式:
struct sample_comparer
{
    bool operator()(const &X1 p_left, const &X2 p_right)
    {
        return p_left == p_right;
    }
    bool operator()(const &X2 p_left, const &X1 p_right)
    {
        return p_left == p_right;
    }
};
下面的代码实际上并没有做任何明智的事情 - 但它确实可以干净地编译:
struct A
{
  struct Compare { bool operator () (A const &, A const &) { return false;}  };
};
struct B
{
  struct Compare { bool operator () (B const &, B const &) { return false; } };
};
typedef std::set<A, A::Compare> S1;
typedef std::set<B, B::Compare> S2;
class IntersectionCompare
{
public:
  bool operator ()(S1::value_type, S2::value_type) { return false; } 
  bool operator ()(S2::value_type, S1::value_type) { return false; } 
};
void bar (S1 & s1, S2 & s2)
{
  S1 result;
  std::set_intersection (s1.begin ()
      , s1.end ()
      , s2.begin ()
      , s2.end ()
      , std :: insert_iterator< S1 > (result, result.end ())
      , IntersectionCompare ());
}