#include <iostream>
#include <set>
typedef std::pair<int, int> pairs;
int main()
{
auto compare = [](pairs lhs, pairs rhs) //custom compare lambda function
{
if(lhs.first > lhs.second ) lhs = pairs{lhs.second, lhs.first };
if(rhs.first > rhs.second ) rhs = pairs{rhs.second, rhs.first };
return lhs< rhs;
};
std::set<pairs, decltype(compare)> Set(compare);
Set.emplace(std::make_pair(0,1)); // use can also emplace to the Set
Set.emplace(pairs{0,2});
Set.emplace(pairs{1,0});
for(const auto& it: Set)
std::cout << it.first << " " << it.second << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogICAgI2luY2x1ZGUgPHNldD4KICAgIAogICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IHBhaXJzOwogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICBhdXRvIGNvbXBhcmUgPSBbXShwYWlycyBsaHMsIHBhaXJzIHJocykgLy9jdXN0b20gY29tcGFyZSBsYW1iZGEgZnVuY3Rpb24KICAgICAgIHsKICAgICAgICAgIGlmKGxocy5maXJzdCA+IGxocy5zZWNvbmQgKSBsaHMgPSBwYWlyc3tsaHMuc2Vjb25kLCBsaHMuZmlyc3QgfTsKICAgICAgICAgIGlmKHJocy5maXJzdCA+IHJocy5zZWNvbmQgKSByaHMgPSBwYWlyc3tyaHMuc2Vjb25kLCByaHMuZmlyc3QgfTsKICAgICAgICAgIHJldHVybiBsaHM8IHJoczsKICAgICAgIH07CiAgICAKICAgICAgIHN0ZDo6c2V0PHBhaXJzLCBkZWNsdHlwZShjb21wYXJlKT4gU2V0KGNvbXBhcmUpOwogICAgCiAgICAgICBTZXQuZW1wbGFjZShzdGQ6Om1ha2VfcGFpcigwLDEpKTsgLy8gdXNlIGNhbiBhbHNvIGVtcGxhY2UgdG8gdGhlIFNldAogICAgICAgU2V0LmVtcGxhY2UocGFpcnN7MCwyfSk7CiAgICAgICBTZXQuZW1wbGFjZShwYWlyc3sxLDB9KTsKICAgIAogICAgICAgZm9yKGNvbnN0IGF1dG8mIGl0OiBTZXQpCiAgICAgICAgICBzdGQ6OmNvdXQgPDwgaXQuZmlyc3QgPDwgIiAiIDw8IGl0LnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgICB9