#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;
}
ICAgICNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgogICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgIAogICAgY2xhc3MgTXlDbGFzcyB7CiAgICBwdWJsaWM6CiAgICAgICAgaW50IGk7CiAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgc3RkOjpzdHJpbmcgczsKICAgIH07CiAgICAgCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBhdXRvIGhhc2ggPSBbXShjb25zdCBNeUNsYXNzJiBtYyl7CiAgICAgICAgICAgIHJldHVybiAoc3RkOjpoYXNoPGludD4oKShtYy5pKSAqIDMxICsgc3RkOjpoYXNoPGRvdWJsZT4oKShtYy5kKSkgKiAzMSArIHN0ZDo6aGFzaDxzdGQ6OnN0cmluZz4oKShtYy5zKTsKICAgICAgICB9OwogICAgICAgIGF1dG8gZXF1YWwgPSBbXShjb25zdCBNeUNsYXNzJiBtYzEsIGNvbnN0IE15Q2xhc3MmIG1jMil7CiAgICAgICAgICAgIHJldHVybiBtYzEuaSA9PSBtYzIuaSAmJiBtYzEuZCA9PSBtYzIuZCAmJiBtYzEucyA9PSBtYzIuczsKICAgICAgICB9OwogICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxNeUNsYXNzLCBkZWNsdHlwZShoYXNoKSwgZGVjbHR5cGUoZXF1YWwpPiBteVNldCg4LCBoYXNoLCBlcXVhbCk7CiAgICAgCiAgICAgICAgbXlTZXQuaW5zZXJ0KHsgMSwgNC4wLCAidGVtcCIgfSk7CiAgICAgICAgbXlTZXQuaW5zZXJ0KHsgMiwgNy4wLCAidGVzdCIgfSk7CiAgICAgICAgbXlTZXQuaW5zZXJ0KHsgMywgOS4wLCAidG9sbCIgfSk7CiAgICAgCiAgICAgICAgZm9yIChhdXRvIGNvbnN0ICZtYyA6IG15U2V0KQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgbWMuaSA8PCAiLCAiIDw8IG1jLmQgPDwgIiwgIiA8PCBtYy5zLmNfc3RyKCkgPDwgc3RkOjplbmRsOwogICAgIAogICAgCXJldHVybiAwOwogICAgfQ==