c – 两种不同类型集的set_intersection

c – 两种不同类型集的set_intersection,第1张

概述有没有办法在两种不同类型的集合上执行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) 有没有办法在两种不同类型的集合上执行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的description我知道我可以使用两个不同的迭代器.

我试图搜索一些我想要的代码示例,但没有找到任何代码示例?有人可以向我提供我的问题的工作代码示例吗?

更新:
错误是:

error: stl_function.h:227: no match for ‘operator<‘ in ‘__x < __y’

提前致谢!

解决方法 plasmaHH的评论可能就是问题所在.

像set_intersection这样的函数的工作方式是它们首先执行的 *** 作:a< b然后b <一个 因此,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 ());}
总结

以上是内存溢出为你收集整理的c – 两种不同类型集的set_intersection全部内容,希望文章能够帮你解决c – 两种不同类型集的set_intersection所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存