Có cách nào để làm std :: set_intersection trên hai loại khác nhau của bộ?set_intersection cho hai loại khác nhau của bộ
tôi có hai bộ:
std::set<X1> l_set1;
std::set<X2> l_set2;
Tôi có thể xác định một số so sánh cho họ để kiểm tra nếu X1 và X2 đều bình đẳng.
struct sample_comparer
{
bool operator()(const &X1 p_left, const &X2 p_right)
{
return p_left == p_right;
}
};
Bây giờ, tôi cố gắng làm một ngã tư thiết lập trên những hai bộ:
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());
Thật không may, tôi không thể ép buộc mã này để làm việc. Tôi thậm chí không chắc chắn nếu điều này là có thể, nhưng từ description của set_intersection tôi biết rằng tôi có thể sử dụng hai trình lặp khác nhau.
Tôi đã cố gắng tìm kiếm một số mẫu mã thực hiện những gì tôi muốn nhưng không tìm thấy bất kỳ mẫu nào? Ai đó có thể trình bày cho tôi một mẫu mã làm việc cho vấn đề của tôi?
Cập nhật: lỗi là:
error: stl_function.h:227: no match for 'operator<' in '__x < __y'
Cảm ơn trước!
"Rất tiếc, tôi không thể buộc mã này hoạt động". Lỗi trình biên dịch nào bạn nhận được? –
Trình so sánh mẫu của bạn không làm điều đúng. Nó cần phải là một ít hơn, áp đặt một thứ tự yếu nghiêm ngặt trên các yếu tố so sánh. – tokage
Bạn đã thử cung cấp một toán tử