#include <iostream>
#include <map>
#include <vector>
std::map<int, std::vector<int>> foo(std::map<int, int> m)
{
std::map<int, std::vector<int>> res;
while (!m.empty())
{
auto it = m.begin();
const auto key = it->first;
auto& v = res[key];
while (it != m.end()) {
auto value = it->second;
v.push_back(value);
m.erase(it);
it = m.find(value);
}
}
return res;
}
int main()
{
std::map<int, int> my_map = { {2, 31}, {4, 36}, {5, 29}, {6, 24}, {24, 49},
{25, 83}, {29, 63}, {36, 42}, {42, 79} };
auto res = foo(my_map);
for (const auto& p : res) {
std::cout << p.first << ":";
for (const auto& e : p.second) {
std::cout << e << " ";
}
std::cout << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjptYXA8aW50LCBzdGQ6OnZlY3RvcjxpbnQ+PiBmb28oc3RkOjptYXA8aW50LCBpbnQ+IG0pCnsKICAgIHN0ZDo6bWFwPGludCwgc3RkOjp2ZWN0b3I8aW50Pj4gcmVzOwogICAKICAgIHdoaWxlICghbS5lbXB0eSgpKQogICAgewogICAgICAgIGF1dG8gaXQgPSBtLmJlZ2luKCk7CiAgICAgICAgY29uc3QgYXV0byBrZXkgPSBpdC0+Zmlyc3Q7CiAgICAgICAgYXV0byYgdiA9IHJlc1trZXldOwogICAgICAgIAogICAgICAgIHdoaWxlIChpdCAhPSBtLmVuZCgpKSB7CiAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBpdC0+c2Vjb25kOwogICAgICAgICAgICB2LnB1c2hfYmFjayh2YWx1ZSk7CiAgICAgICAgICAgIG0uZXJhc2UoaXQpOwogICAgICAgICAgICBpdCA9IG0uZmluZCh2YWx1ZSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6Om1hcDxpbnQsIGludD4gbXlfbWFwID0geyB7MiwgMzF9LCB7NCwgMzZ9LCB7NSwgMjl9LCB7NiwgMjR9LCB7MjQsIDQ5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsyNSwgODN9LCB7MjksIDYzfSwgezM2LCA0Mn0sIHs0MiwgNzl9IH07CgogICAgYXV0byByZXMgPSBmb28obXlfbWFwKTsKICAgIAogICAgZm9yIChjb25zdCBhdXRvJiBwIDogcmVzKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHAuZmlyc3QgPDwgIjoiOwogICAgICAgIGZvciAoY29uc3QgYXV0byYgZSA6IHAuc2Vjb25kKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBlIDw8ICIgIjsKICAgICAgICB9CiAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIH0KfQo=