#include <iostream>
#include <functional>
#include <unordered_set>

struct X
{
    std::string key_;
};

int main() {
	std::unordered_set<X,
	                   std::function<size_t(const X&)>,
	                   std::function<bool(const X&, const X&)> > s{
	         5, // initial bucket count
	         [](const X& x) { return std::hash<decltype(x.key_)>()(x.key_); },
	         [](const X& lhs, const X& rhs) { return lhs.key_ == rhs.key_; }
	     };
    s.insert({"one"});
    s.insert({"two"});
    s.insert({"three"});
	for (auto& x : s)
	    std::cout << x.key_ << '\n';
}