有什麼辦法可以在兩種不同類型的集合上執行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)' –