Cách chuẩn giao nhau hai bộ trong C++ là phải làm như sau:Trong chỗ C++ thiết lập giao
std::set<int> set_1; // With some elements
std::set<int> set_2; // With some other elements
std::set<int> the_intersection; // Destination of intersect
std::set_intersection(set_1.begin(), set_1.end(), set_2.begin(), set_2.end(), std::inserter(the_intersection, the_intersection.end()));
Làm thế nào tôi sẽ đi về làm một bộ giao nhau tại chỗ? Đó là, tôi muốn set_1 có kết quả của cuộc gọi đến set_intersection. Rõ ràng, tôi chỉ có thể làm một set_1.swap(the_intersection)
, nhưng điều này là rất ít hiệu quả hơn so với giao nhau tại chỗ.
Tiếp tục dư thừa và tôi sắp xếp lại thành 'if (* it1 <* it2) nếu if (* it2 <* it1) else ...' để toán tử so sánh duy nhất bạn đang sử dụng nhỏ hơn - đó là cách 'set' hoạt động. –
Phải! Bởi vì đó là nếu-else nếu, vv Tôi đã suy nghĩ các điều kiện sau đây sẽ được kiểm tra. Cảm ơn, tôi sẽ chỉnh sửa câu trả lời. – ChrisInEdmonton
'set_1.erase (it1 ++)' không chính xác đối với một số vùng chứa (chẳng hạn như vectơ), ngay cả khi nó hợp lệ trong trường hợp của bạn. Bạn nên sử dụng 'it1 = set_1.erase (it1)' hợp lệ với tất cả các vùng chứa. –