std::set
You must implement a Set class that supports the following code snippets and produces the specified output.
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <string_view>
template<typename T> class Set;
template<typename T>
std::ostream& operator<<(std::ostream& out, const Set<T>& set)
{
if (set.empty())
return out << "{}";
out << "{ " << *set.begin();
std::for_each(std::next(set.begin()), set.end(), [&out](const T& element)
{
out << ", " << element;
});
return out << " }";
}
int main()
{
Set<int> set{1, 5, 3};
std::cout << set << '\n';
set.insert(2);
std::cout << set << '\n';
set.erase(1);
std::cout << set << "\n\n";
Set<int> keys{3, 4};
for (int key : keys)
{
if (set.contains(key))
std::cout << set << " does contain " << key << '\n';
else
std::cout << set << " doesn't contain " << key << '\n';
}
std::cout << '\n';
std::string_view word = "element";
Set<char> characters(word.begin(), word.end());
std::cout << "There are " << characters.size() << " unique characters in "
<< std::quoted(word) << ":\n" << characters << '\n';
}
Output
{ 1, 3, 5 }
{ 1, 2, 3, 5 }
{ 2, 3, 5 }
{ 2, 3, 5 } does contain 3
{ 2, 3, 5 } doesn't contain 4
There are 5 unique characters in "element":
{ e, l, m, n, t }
You may not use std::set or modify the given code.
