    #include <unordered_set>
    #include <iostream>
     
    class MyClass {
    public:
        int i;
        double d;
        std::string s;
    };
     
    int main() {
        auto hash = [](const MyClass& mc){
            return (std::hash<int>()(mc.i) * 31 + std::hash<double>()(mc.d)) * 31 + std::hash<std::string>()(mc.s);
        };
        auto equal = [](const MyClass& mc1, const MyClass& mc2){
            return mc1.i == mc2.i && mc1.d == mc2.d && mc1.s == mc2.s;
        };
        std::unordered_set<MyClass, decltype(hash), decltype(equal)> mySet(8, hash, equal);
     
        mySet.insert({ 1, 4.0, "temp" });
        mySet.insert({ 2, 7.0, "test" });
        mySet.insert({ 3, 9.0, "toll" });
     
        for (auto const &mc : mySet)
            std::cout << mc.i << ", " << mc.d << ", " << mc.s.c_str() << std::endl;
     
    	return 0;
    }