使用指向列表中其他元素的元素声明 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
};
我正在尝试使用 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
};