包含自己的地图

use*_*062 1 c++ stl std c++11

目前我正在努力应对包含自己的地图.但是编译时我不知道嵌套的深度.

std::map<Key, std::map<Key, std::map<Key, std::map<Key, ...>>>>
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标而不是无限重复自己?

Dav*_*eas 7

自引用数据结构的金锤是指针的使用.在您的特定情况下,要实现树,您可以这样做:

template <typename Key, typename Value>
struct Node {
   Value data;
   std::map< Key, std::shared_ptr<Node> > child;
// ...
};
Run Code Online (Sandbox Code Playgroud)

树中的每个节点都包含一个值和一组Node通过共享指针映射维护的子节点.的std::map要求(根据标准)所存储的类型是完整的,但shared_ptr只需要类型为在创建点,其允许该数据结构完整.普通Node*也可以工作,但是你必须手动管理内存.