/* * set-07.cc Standard Library, std::set, exercise 7. */ #include #include #include using namespace std; template ostream& operator<<(ostream& os, const set& s) { copy(begin(s), end(s), ostream_iterator(cout, " ")); return os; } // Exercise 5 template set operator*(const set& lhs, const set& rhs) { set result; auto lhs_iter = lhs.cbegin(); auto rhs_iter = rhs.cbegin(); while (lhs_iter != end(lhs) && rhs_iter != end(rhs)) { if (*lhs_iter < *rhs_iter) ++lhs_iter; else if (*lhs_iter > *rhs_iter) ++rhs_iter; else { result.insert(*lhs_iter); ++lhs_iter; ++rhs_iter; } } return result; } // Exercise 6 template bool subset(const set& lhs, const set& rhs) { return lhs == lhs * rhs; } template bool operator<=(const set& lhs, const set& rhs) { return subset(lhs, rhs); } int main() { set s1{ "foo", "bar" }; set s2{ "foo", "fum", "godzilla", "bar" }; cout << '\n'; cout << "s1: " << s1 << '\n'; cout << "s2: " << s2 << "\n\n"; cout << boolalpha; cout << "s1 <= s2? " << (s1 <= s2) << '\n'; cout << "s2 <= s1? " << (s2 <= s1) << '\n'; cout << "s1 <= s1? " << (s1 <= s1) << '\n'; return 0; }