— Проблемы с именованием, используете C++, stl, так и именуйте в стиле stl, давайте методам осмысленные имена.
— Не забывайте о typedef для value_type и подобных
— Зачем тип вершины заворачивать в shared_ptr? Это приведет к оверхеду, это приведет к снижению производительности
— vertices.at(x); используется совсем не по назначению, если надо кинуть out_of_range, так и проверяйте с размером и кидайте руками.
— Как написано выше operator<< выводить должен в stream, а не std::cout
— Vertice* vertice(int index) const необходимо возвращать ссылку, либо кидать исключение out_of_range, а не указатель.