The Graph concept contains a few requirements that are common to all
the graph concepts. These include some associated types for
vertex_descriptor, edge_descriptor, etc. One should
note that a model of Graph is not required to be a model of Assignable,
so algorithms should pass graph objects by reference.
| boost::graph_traits<G>::vertex_descriptorA vertex descriptor corresponds to a unique vertex in an abstract
graph instance. A vertex descriptor must be
Default Constructible,
Assignable, and
Equality Comparable. | 
| boost::graph_traits<G>::edge_descriptorAn edge descriptor corresponds to a unique edge (u,v) in a
graph.  An edge descriptor must be Default Constructible,
Assignable, and
Equality Comparable. | 
| boost::graph_traits<G>::directed_categoryThis type shall be convertible to directed_tag or undirected_tag. | 
| boost::graph_traits<G>::edge_parallel_categoryThis describes whether the graph class allows the insertion of
parallel edges (edges with the same source and target). The two tags
are allow_parallel_edge_tag and disallow_parallel_edge_tag. | 
| boost::graph_traits<G>::traversal_categoryThis describes the ways in which the vertices and edges of the
graph can be visited. The choices are incidence_graph_tag,
adjacency_graph_tag, bidirectional_graph_tag,
vertex_list_graph_tag, edge_list_graph_tag, and
adjacency_matrix_tag. |