#include "roadmap.h" #include #include using std::map; using std::set; class ConcreteRoadMap : public AbstractRoadMap { private: int cities; map< string, set > adj; /* * Adds in the map for key city1 a new set with city2 inside if there is no * prior set, otherwise it appends city2 into the existing set */ void addPair(const string& city1, const string& city2) { this->adj[city1].insert(city2); } public: ConcreteRoadMap() : adj(), cities(0) {}; void addRoad(const string& city1, const string& city2) override { addPair(city1, city2); addPair(city2, city1); } void addRoad(const vector& cities) override { for (size_t i = 0; i < cities.size() - 1; i++) { addRoad(cities[i], cities[i + 1]); } } void clear() override { this->adj.clear(); } int neighborCountForCity(const string& city) const override { auto i = this->adj.find(city); return i->second.size(); } };