std::ranges provides set operations for sorted ranges.
1#include <ranges>23std::vector<int> a = {1, 2, 3, 4};4std::vector<int> b = {3, 4, 5, 6};56// Union7auto uni = std::ranges::set_union(a, b);8// 1, 2, 3, 4, 5, 6910// Intersection11auto inter = std::ranges::set_intersection(a, b);12// 3, 41314// Difference15auto diff = std::ranges::set_difference(a, b);16// 1, 21718// Symmetric difference19auto sym = std::ranges::set_symmetric_difference(a, b);20// 1, 2, 5, 62122// Inplace versions23std::vector<int> result;24std::ranges::set_union(a, b, std::back_inserter(result));2526// With custom comparator27std::ranges::set_union(a, b, std::back_inserter(result),28 std::ranges::greater{});2930// Includes31if (std::ranges::includes(a, b)) { /* a contains all of b */ }3233// Must be sorted!34std::ranges::sort(a);35std::ranges::sort(b);
Requirements: