#include <unordered_set>
#include <iostream>
struct someType{
std::string name;
int code;
};
int main() {
auto hash = [](const someType& st){
return std::hash<std::string>()(st.name) * 31 + std::hash<int>()(st.code);
};
auto equal = [](const someType& st1, const someType& st2){
return st1.name == st2.name && st1.code == st2.code;
};
std::unordered_set<someType, decltype(hash), decltype(equal)> myset(8, hash, equal);
myset.insert({ "aaa", 123 });
myset.insert({ "bbb", 321 });
myset.insert({ "ccc", 213 });
for (auto const &st : myset)
std::cout << st.name.c_str() << ", " << st.code << std::endl;
return 0;
}
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnN0cnVjdCBzb21lVHlwZXsKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBpbnQgY29kZTsKfTsKCmludCBtYWluKCkgewogICAgYXV0byBoYXNoID0gW10oY29uc3Qgc29tZVR5cGUmIHN0KXsKICAgICAgICByZXR1cm4gc3RkOjpoYXNoPHN0ZDo6c3RyaW5nPigpKHN0Lm5hbWUpICogMzEgKyBzdGQ6Omhhc2g8aW50PigpKHN0LmNvZGUpOwogICAgfTsKICAgIGF1dG8gZXF1YWwgPSBbXShjb25zdCBzb21lVHlwZSYgc3QxLCBjb25zdCBzb21lVHlwZSYgc3QyKXsKICAgICAgICByZXR1cm4gc3QxLm5hbWUgPT0gc3QyLm5hbWUgJiYgc3QxLmNvZGUgPT0gc3QyLmNvZGU7CiAgICB9OwogICAgc3RkOjp1bm9yZGVyZWRfc2V0PHNvbWVUeXBlLCBkZWNsdHlwZShoYXNoKSwgZGVjbHR5cGUoZXF1YWwpPiBteXNldCg4LCBoYXNoLCBlcXVhbCk7CiAgICAKICAgIG15c2V0Lmluc2VydCh7ICJhYWEiLCAxMjMgfSk7CiAgICBteXNldC5pbnNlcnQoeyAiYmJiIiwgMzIxIH0pOwogICAgbXlzZXQuaW5zZXJ0KHsgImNjYyIsIDIxMyB9KTsKCiAgICBmb3IgKGF1dG8gY29uc3QgJnN0IDogbXlzZXQpCiAgICAgICAgc3RkOjpjb3V0IDw8IHN0Lm5hbWUuY19zdHIoKSA8PCAiLCAiIDw8IHN0LmNvZGUgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9