This graph implementation is based on the that of the wikipedia : link
If VertexDataType is a class, it requires a copy constructor
Graph<VertexDataType> g;
If you want to add vertexes initally
Graph<VertexDataType> g{"A", "B", "C"};
If you need not to use vertex data
Graph<> g;
g.AddVertex("vertex name");
or
g += "vertex name";
g.RemoveVertex("vertex name")
or
g -= "vertex name"
g.SetVertexData("vertex name", data);
g.GetVertexData("vertex name");
g.IsVertexExist("vertex name");
edges are directed "from", "to" != "to", "from" (the weight defaults to 0)
g.AddEdge("from", "to");
g.RemoveEdge("from", "to");
g.SetEdgeWeight("from", "to", weight);
g.GetEdgeWeight("from", "to");
IsAdjacent("from", "to");
g.Neighbors("v");
or
g["v"];
g.GetAllVertexes();
Don't worry, this operation is O(1)
g.Neighbors("v").size();
or
g.["v"].size();
g1 = g2
g.Clear()