Это решает проблему, уникальность, добавление / удаление Dir - все, как кажется, решено. но нам нужно тщательно отслеживать список и unordered_map, чтобы убедиться, что он работает правильно. не уверен, что это лучший путь.
struct Dir{
std::string name;
std::list<Dir> down;
std::unordered_map<std::string, std::list<Dir>::iterator> downMap;
};