```#include <iostream>
#include <string>
#include <vector>
#include "Graph.h" // Defined in Listing 26.2
#include "Edge.h" // Defined in Listing 26.1
using namespace std;

int main()
{
// Vertices for graph in Figure 26.1
string vertices[] = { "Seattle", "San Francisco", "Los Angeles",
"Denver", "Kansas City", "Chicago", "Boston", "New York",
"Atlanta", "Miami", "Dallas", "Houston" };

// Edge array for graph in Figure 26.1
int edges[][2] = {
{ 0, 1 }, { 0, 3 }, { 0, 5 },
{ 1, 0 }, { 1, 2 }, { 1, 3 },
{ 2, 1 }, { 2, 3 }, { 2, 4 }, { 2, 10 },
{ 3, 0 }, { 3, 1 }, { 3, 2 }, { 3, 4 }, { 3, 5 },
{ 4, 2 }, { 4, 3 }, { 4, 5 }, { 4, 7 }, { 4, 8 }, { 4, 10 },
{ 5, 0 }, { 5, 3 }, { 5, 4 }, { 5, 6 }, { 5, 7 },
{ 6, 5 }, { 6, 7 },
{ 7, 4 }, { 7, 5 }, { 7, 6 }, { 7, 8 },
{ 8, 4 }, { 8, 7 }, { 8, 9 }, { 8, 10 }, { 8, 11 },
{ 9, 8 }, { 9, 11 },
{ 10, 2 }, { 10, 4 }, { 10, 8 }, { 10, 11 },
{ 11, 8 }, { 11, 9 }, { 11, 10 }
};
const int NUMBER_OF_EDGES = 46; // 46 edges in Figure 26.1

// Create a vector for vertices
vector<string> vectorOfVertices(12);
copy(vertices, vertices + 12, vectorOfVertices.begin());

Graph<string> graph1(vectorOfVertices, edges, NUMBER_OF_EDGES);
cout << "The number of vertices in graph1: " << graph1.getSize();
cout << "\nThe vertex with index 1 is " << graph1.getVertex(1);
cout << "\nThe index for Miami is " << graph1.getIndex("Miami");

cout << "\nedges for graph1: " << endl;
graph1.printEdges();

cout << "\nAdjacency matrix for graph1: " << endl;

// vector of Edge objects for graph in Figure 26.3a
vector<Edge> edgeVector;
edgeVector.push_back(Edge(0, 2));
edgeVector.push_back(Edge(1, 2));
edgeVector.push_back(Edge(2, 4));
edgeVector.push_back(Edge(3, 4));
// Create a graph with 5 vertices
Graph<int> graph2(5, edgeVector);

cout << "The number of vertices in graph2: " << graph2.getSize();
cout << "\nedges for graph2: " << endl;
graph2.printEdges();

cout << "\nAdjacency matrix for graph2: " << endl;

return 0;
}
```