Программа должна по данному человеку выдавать список всех его потомков (его самого, детей, внуков, правнуков и т.д.) без повторений.
Если используете C++
и можете задать
size_t std::hash<Person>::operator() (например, можете гарантировать, что два
Person* отличаются тогда и только тогда, когда отличаются указатели, или можете гарантировать уникальность имени, от которого можно взять
std::hash<std::string>()), то детей можно сложить в стандартный
std::unordered_set<Person>.
Хотя стоп. Если каждый человек уникально определяется указателем
Person*, то достаточно собрать множество указателей
std::unordered_set<Person*>, поскольку для любых указателей
std::hash уже определён.