c – 两种不同类型集的set_intersection
发布时间:2020-12-16 03:28:53 所属栏目:百科 来源:网络整理
导读:有没有办法在两种不同类型的集合上执行std :: set_intersection? 我有两套: std::setX1 l_set1;std::setX2 l_set2; 我能够为它们定义一些比较器来检查X1和X2是否相等. struct sample_comparer{ bool operator()(const X1 p_left,const X2 p_right) { retur
有没有办法在两种不同类型的集合上执行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我知道我可以使用两个不同的迭代器. 我试图搜索一些我想要的代码示例,但没有找到任何代码示例?有人可以向我提供我的问题的工作代码示例吗? 更新:
提前致谢! 解决方法
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 ()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |