fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <set>
  5. #include <string>
  6. #include <vector>
  7.  
  8. #include <cassert>
  9.  
  10. template <typename Container>
  11. std::ostream& print(const std::string& name, const Container& c)
  12. {
  13. std::ostream& os = std::cout;
  14. using value_type = typename Container::value_type;
  15. os << name << ": ";
  16. std::copy(std::begin(c), std::end(c), std::ostream_iterator<value_type>(os, ", "));
  17. os << '\n';
  18. return os;
  19. }
  20.  
  21. int main() {
  22.  
  23. std::vector<std::string> a1{{"A", "B", "C"}};
  24. std::vector<std::string> a2{{"B", "C", "D", "F", "X"}};
  25. print("a1", a1);
  26. print("a2", a2);
  27. std::cout << '\n';
  28.  
  29. assert(std::is_sorted(a1.begin(), a1.end()));
  30. assert(std::is_sorted(a2.begin(), a2.end()));
  31.  
  32. std::set<std::string> intersection;
  33. std::set<std::string> symmetric_diff;
  34. std::set<std::string> union_;
  35.  
  36. std::set_union(a1.begin(), a1.end(), a2.begin(), a2.end(),
  37. std::inserter(union_, union_.begin()));
  38. print("union_", union_);
  39.  
  40. std::set_intersection(a1.begin(), a1.end(), a2.begin(), a2.end(),
  41. std::inserter(intersection, intersection.begin()));
  42. print("intersection", intersection);
  43.  
  44. std::set_symmetric_difference(a1.begin(), a1.end(), a2.begin(), a2.end(),
  45. std::inserter(symmetric_diff, symmetric_diff.begin()));
  46. print("symmetric_difference", symmetric_diff);
  47. }
Success #stdin #stdout 0s 4456KB
stdin
Standard input is empty
stdout
a1: A, B, C, 
a2: B, C, D, F, X, 

union_: A, B, C, D, F, X, 
intersection: B, C, 
symmetric_difference: A, D, F, X,