Hello people..! This is a special extension for my discussion on Graph Theory Basics. Here, I give you the code for implementing the Adjacency List using C++ STL where each vertex is a string instead of and integer. This code has been requested many times, so I decided to create a separate page for it. Some of the features of this code are –
- The Adjacency List is an unordered map of list. Where each list item is a pair, from the utility header file. This pair stores two values, the destination vertex (string), (V2 in an edge V1 → V2) and the weight (integer) of the edge.
- For adding an edge, all we have to do is to call push_back() function. Although it does not represent our addEdge() in the initial discussion where we had head insertion, it is tail insertion which is an O(1) insertion operation.
- The vector representing the vertices is 1-indexed.
#include <iostream> #include <string> #include <unordered_map> #include <list> using namespace std; int main() { int vertices, edges, weight; string v1, v2; printf("Enter the Number of Vertices -\n"); cin >> vertices; printf("Enter the Number of Edges -\n"); cin >> edges; // Adjacency List is a map of <string, list>. // Where each element in the list is pair<string, int> // pair.first -> the edge's destination (string) // pair.second -> edge's weight unordered_map< string, list< pair<string, int> > > adjacencyList(vertices + 1); printf("Enter the Edges V1 -> V2, of weight W\n"); for (int i = 1; i <= edges; ++i) { cin >> v1 >> v2 >> weight; // Adding Edge to the Directed Graph adjacencyList[v1].push_back(make_pair(v2, weight)); } // Printing Adjacency List cout << endl << "The Adjacency List-" << endl; for (auto& value : adjacencyList) { string vertex = value.first; list< pair<string, int> > adjacentVertices = value.second; list< pair<string, int> >::iterator itr = adjacentVertices.begin(); cout << "adjacencyList[" << vertex << "]"; while (itr != adjacentVertices.end()) { cout << " -> " << (*itr).first << " (" << (*itr).second << ")"; ++itr; } cout << endl; } return 0; }
Feel free to comment if you have any doubts..! Keep practicing..! Happy Coding..! 😀