声明一个c++ std::list,其中的元素指向列表中的其他元素



我试图使用std::列表和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是好还是坏。

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

子指针可以是非拥有的,映射拥有所有节点。

class Graph {
struct Node {
unsigned key;
std::vector<Node *> children;
};
std::unordered_map<unsigned, Node> nodes;
public:
// graph behaviours
};

最新更新