45 lines
976 B
C++
45 lines
976 B
C++
#include "roadmap.h"
|
|
#include <map>
|
|
#include <set>
|
|
|
|
using std::map;
|
|
using std::set;
|
|
|
|
class ConcreteRoadMap : public AbstractRoadMap {
|
|
private:
|
|
int cities;
|
|
|
|
map< string, set<string> > 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<string>& 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();
|
|
}
|
|
};
|