有什么办法可以在两种不同类型的集合上执行std :: set_intersection?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'
谢谢!
”不幸的是,我无法强制此代码正常工作。“你得到什么编译器错误? –
您的示例比较器没有做正确的事情。它需要小于,对比较的元素施加严格的弱排序。 – tokage
您是否尝试提供一个超载的<运算符'布尔运算符<(X1,X2)' –