#include #include using namespace std; class Node { typedef set::const_iterator node_iterator; private: string name; set neighboors; void add_neigboor(Node* neighboor); void remove_neighboor(Node* neighboor); public: Node(const string& aname); const string get_name() const; node_iterator nb_begin() const { return neighboors.begin(); }; node_iterator nb_end() const { return neighboors.end(); }; friend class Graph; }; class Graph { typedef set::const_iterator node_iterator; private: set nodes; public: Graph() {}; void add_node(Node* node); void remove_node(Node* node); void add_edge(Node* begin, Node* end); void remove_edge(Node* begin, Node* end); node_iterator begin() { return nodes.begin(); }; node_iterator end() { return nodes.end(); }; };