I\'m trying to make a graph with adjacency lists, but I can\'t figure out how to specify an appropriate lifetime for the references in the adjacency list.
What I\'m
I think there is an issue here. If we transpose this to C++:
template
struct Graph {
std::vector nodes;
std::vector> adjacencies;
};
where adjacencies points into nodes, then one realizes that there is an issue: an operation on nodes that invalidates references (such as reallocation) will leave dangling pointers into adjacencies.
I see at least two ways to fix this:
adjacencies, as those are stablenodes, so that the memory is pinnedIn Rust, this gives:
struct Graph {
nodes: Vec,
adjacencies: Vec>,
};
struct Graph {
nodes: Vec>>,
adjacencies: Vec>>>,
};
Note: the RefCell is to allow mutating T despite it being aliased, by introducing a runtime check.