#include <iostream>
#include <vector>
#include <string>
struct MenuItem
{
std::string name;
std::vector<MenuItem> children;
};
void printMenu(const std::vector<MenuItem> &menu, int level);
int main(void)
{
std::vector<MenuItem> menu
{
{
{
{ "Menu Item 1" },
{
{
{ "Item 1.1" },
{
{
{ "Item 1.1.1" },
{ {} }
},
{
{ "Item 1.1.2" },
{ {} }
}
}
},
{
{ "Item 1.2" },
{
{
{ "Item 1.2.1" },
{ {} }
},
{
{ "Item 1.2.2" },
{ {} }
}
}
},
}
},
{
{ "Menu Item 2" },
{
{
{ "Item 2.1" },
{
{
{ "Item 2.1.1" },
{ {} }
},
{
{ "Item 2.1.2" },
{ {} }
}
}
},
{
{ "Item 2.2" },
{
{
{ "Item 2.2.1" },
{ {} }
},
{
{ "Item 2.2.2" },
{ {} }
}
}
},
}
}
}
};
printMenu( menu, 0 );
return 0;
}
void printMenu(const std::vector<MenuItem> &menu, int level)
{
std::string prefix( level, '\t' );
// visiting the next menu level
++level;
for (const auto &item : menu)
{
std::cout << prefix << item.name << std::endl;
printMenu( item.children, level );
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IE1lbnVJdGVtIAp7CiAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgc3RkOjp2ZWN0b3I8TWVudUl0ZW0+IGNoaWxkcmVuOwp9OwoKdm9pZCBwcmludE1lbnUoY29uc3Qgc3RkOjp2ZWN0b3I8TWVudUl0ZW0+ICZtZW51LCBpbnQgbGV2ZWwpOwoKaW50IG1haW4odm9pZCkgCnsKCXN0ZDo6dmVjdG9yPE1lbnVJdGVtPiBtZW51IAoJewoJICAgIHsKCSAgICAgICAgeyAKCSAgICAgICAgICAgIHsgIk1lbnUgSXRlbSAxIiB9LAoJICAgICAgICAgICAgeyAKCSAgICAgICAgICAgICAgICB7CgkgICAgICAgICAgICAgICAgICAgIHsgIkl0ZW0gMS4xIiB9LAoJICAgICAgICAgICAgICAgICAgICB7IAoJICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkl0ZW0gMS4xLjEiIH0sCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7fSB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkl0ZW0gMS4xLjIiIH0sCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7fSB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICB9LAoJICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgeyAiSXRlbSAxLjIiIH0sCgkgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJJdGVtIDEuMi4xIiB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsge30gfQoJICAgICAgICAgICAgICAgICAgICAgICAgfSwKCSAgICAgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJJdGVtIDEuMi4yIiB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsge30gfQoJICAgICAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgfSwKCSAgICAgICAgICAgIH0KCSAgICAgICAgfSwKCSAgICAgICAgewoJICAgICAgICAgICAgeyAiTWVudSBJdGVtIDIiIH0sCgkgICAgICAgICAgICB7CgkgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICB7ICJJdGVtIDIuMSIgfSwKCSAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkl0ZW0gMi4xLjEiIH0sCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7fSB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgewoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkl0ZW0gMi4xLjIiIH0sCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7fSB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICB9LAoJICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgeyAiSXRlbSAyLjIiIH0sCgkgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJJdGVtIDIuMi4xIiB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsge30gfQoJICAgICAgICAgICAgICAgICAgICAgICAgfSwKCSAgICAgICAgICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJJdGVtIDIuMi4yIiB9LAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsge30gfQoJICAgICAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgfSwKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIH0KCX07CgkKCXByaW50TWVudSggbWVudSwgMCApOwoJCglyZXR1cm4gMDsKfQoKdm9pZCBwcmludE1lbnUoY29uc3Qgc3RkOjp2ZWN0b3I8TWVudUl0ZW0+ICZtZW51LCBpbnQgbGV2ZWwpIAp7CiAgICBzdGQ6OnN0cmluZyBwcmVmaXgoIGxldmVsLCAnXHQnICk7CgogICAgLy8gdmlzaXRpbmcgdGhlIG5leHQgbWVudSBsZXZlbAogICAgKytsZXZlbDsKCiAgICBmb3IgKGNvbnN0IGF1dG8gJml0ZW0gOiBtZW51KSAKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgcHJlZml4IDw8IGl0ZW0ubmFtZSA8PCBzdGQ6OmVuZGw7CgogICAgICAgIHByaW50TWVudSggaXRlbS5jaGlsZHJlbiwgbGV2ZWwgKTsKICAgIH0KfQ==