使用指向列表中其他元素的元素声明 C++ std::list

Declare a C++ std::list with elements that point to other elements in the list

我正在尝试使用 std::list 和 std::unordered_map 来存储有向无环图。每个列表元素存储一个节点键(无符号)及其子节点。地图为每个键存储一个指向列表中节点的迭代器:

std::list<std::pair<unsigned, std::list<decltype(lst.begin())>>> lst;
std::unordered_map<unsigned, decltype(lst.begin())> nodemap;

但是 lst 声明中的 decltype(lst.begin()) 会导致编译错误,因为 lst 尚未定义。我可以用另一种方式定义 lst 吗?

编辑:使用 std::vector<unsigned, std::list<unsigned>> vec 可能会起作用,其中 list<unsigned> 包含 vec 的索引。不确定坚持最初的 std::list 是好是坏。

写 classes。在 class 的定义中,它是一个不完整的类型,这意味着您可以使用指向它的指针(或引用)。

子指针可以是非拥有的,地图拥有所有节点。

class Graph {
    struct Node {
        unsigned key;
        std::vector<Node *> children;
    };

    std::unordered_map<unsigned, Node> nodes;
public:
    // graph behaviours
};