What is an efficient way to implement Adjacency List Representation of Graph in C++
Many typical graph problems apply to a given static graph that will need to be represented once whereafter the given representation can be re-used whilst solving the related problem. In this case, std::unordered_map<int, std::vector<int>>
is an appropriate structure; where the value for a given key in the unordered map represents the (single-/bi-directional) connected vertices for a given vertex. There should be no reason to use the ordered std::map
over the amortized constant-time lookup container std::unordered_map
.
The associative containers std::unordered_map
and std::unordered_set
are quick for lookup (which you want here), but can have performance implications if they need to mutate often (e.g. for a dynamic graph problem). As always, profiling and measuring runtime and memory to find bottlenecks for you actual problem implementation is key if you are implementing a highperf computation program.