fork(2) download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <map>
  5. #include <set>
  6. #include <string>
  7.  
  8. typedef std::multimap<std::string, std::string> map_type;
  9.  
  10. void display(const map_type& m, const std::string& title)
  11. {
  12. std::cout << title << std::endl;
  13. std::cout << "-------------" << std::endl;
  14. for (map_type::const_iterator i = m.begin(), end = m.end(); i != end; ++i)
  15. {
  16. std::cout << i->first << " " << i->second << std::endl;
  17. }
  18. std::cout << "-------------" << std::endl;
  19. }
  20.  
  21. int main ()
  22. {
  23. map_type m, n, m_intersect_n;
  24.  
  25. m.insert(std::make_pair("1-2", "1-1"));
  26. m.insert(std::make_pair("1-2", "1-2"));
  27. m.insert(std::make_pair("1-2", "1-3"));
  28. m.insert(std::make_pair("1-2", "1-4"));
  29. m.insert(std::make_pair("1-3", "2-1"));
  30. m.insert(std::make_pair("1-3", "21-1"));
  31. m.insert(std::make_pair("1-3", "21-2"));
  32.  
  33. display(m, "multimap of m");
  34.  
  35. n.insert(std::make_pair("1-2", "1-1"));
  36. n.insert(std::make_pair("1-2", "1-2"));
  37. n.insert(std::make_pair("1-2", "1-5"));
  38. n.insert(std::make_pair("1-2", "1-7"));
  39. n.insert(std::make_pair("1-3", "2-1"));
  40. n.insert(std::make_pair("1-3", "21-4"));
  41. n.insert(std::make_pair("1-3", "21-2"));
  42.  
  43. display(n, "multimap of n");
  44.  
  45. std::set<map_type::value_type> sorted_m(m.begin(), m.end());
  46. std::set<map_type::value_type> sorted_n(n.begin(), n.end());
  47.  
  48. std::set_intersection(sorted_m.begin(), sorted_m.end(),
  49. sorted_n.begin(), sorted_n.end(),
  50. std::inserter(m_intersect_n, m_intersect_n.end()));
  51.  
  52. display(m_intersect_n, "intersection");
  53.  
  54. m.clear();
  55. std::set_difference(sorted_m.begin(), sorted_m.end(),
  56. sorted_n.begin(), sorted_n.end(),
  57. std::inserter(m, m.end()));
  58.  
  59. display(m, "in m only");
  60.  
  61. n.clear();
  62. std::set_difference(sorted_n.begin(), sorted_n.end(),
  63. sorted_m.begin(), sorted_m.end(),
  64. std::inserter(n, n.end()));
  65.  
  66. display(n, "in n only");
  67. }
  68.  
Success #stdin #stdout 0.01s 2872KB
stdin
Standard input is empty
stdout
multimap of m
-------------
1-2 1-1
1-2 1-2
1-2 1-3
1-2 1-4
1-3 2-1
1-3 21-1
1-3 21-2
-------------
multimap of n
-------------
1-2 1-1
1-2 1-2
1-2 1-5
1-2 1-7
1-3 2-1
1-3 21-4
1-3 21-2
-------------
intersection
-------------
1-2 1-1
1-2 1-2
1-3 2-1
1-3 21-2
-------------
in m only
-------------
1-2 1-3
1-2 1-4
1-3 21-1
-------------
in n only
-------------
1-2 1-5
1-2 1-7
1-3 21-4
-------------