Advertisement
Guest User

groupscreator

a guest
Feb 8th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <map>
  4. #include <string>
  5. #include <vector>
  6. #include <fstream>
  7. #include <algorithm>
  8. #include <iterator>
  9.  
  10. using namespace std;
  11.  
  12. class GroupsCreator
  13. {
  14.     virtual multimap<int, string> GetGroupMap() = 0;
  15. };
  16.  
  17. class Student
  18. {
  19.     int group;
  20.     string number;
  21.  
  22. public:
  23.  
  24.     Student() : group(0), number("") {}
  25.  
  26.     Student(const int _group, const string& _number) : group(_group), number(_number) {}
  27.  
  28.     int GetGroup() const { return group; }
  29.     string GetNumber() const { return number; }
  30.  
  31.     bool operator < (const Student& student) const
  32.     {
  33.         return number < student.number;
  34.     }
  35.  
  36.     bool operator != (const Student& student) const
  37.     {
  38.         return group != student.group && number != student.number;
  39.     }
  40.  
  41.     friend ostream& operator << (ostream& stream, const Student& student)
  42.     {
  43.         stream << student.group << " " << student.number;
  44.  
  45.         return stream;
  46.     }
  47.  
  48.     friend istream& operator >> (istream& stream, Student& student)
  49.     {
  50.         stream >> student.number >> student.group;
  51.  
  52.         return stream;
  53.     }
  54. };
  55.  
  56. class Exam : GroupsCreator
  57. {
  58.     string name;
  59.     vector<Student> students;
  60.  
  61. public:
  62.  
  63.     Exam(const string& filename)
  64.     {
  65.         ifstream(filename, ios::in) >> *this;
  66.     }
  67.  
  68.     string GetName() const { return name; }
  69.  
  70.     void SetName(const string& _name) { name = _name; }
  71.  
  72.     multimap<int, string> GetGroupMap()
  73.     {
  74.         multimap<int, string> group_map;
  75.  
  76.         transform(students.begin(), students.end(), inserter(group_map, group_map.begin()), [](Student& student){
  77.             return pair<int, string>(student.GetGroup(), student.GetNumber());
  78.         });
  79.  
  80.         return group_map;
  81.     }
  82.  
  83.     static void out(ostream& stream, const multimap<int, string>& group_map, const int group)
  84.     {
  85.         multimap<int, string> in_group_map;
  86.  
  87.         copy_if(group_map.begin(), group_map.end(), inserter(in_group_map, in_group_map.begin()), [&group](pair<int, string> key_value) {
  88.             return key_value.first == group;
  89.         });
  90.  
  91.         vector<string> data;
  92.  
  93.         transform(in_group_map.begin(), in_group_map.end(), back_inserter(data), [](pair<int, string> key_value){ return key_value.first + " " + key_value.second; });
  94.  
  95.         copy(data.begin(), data.end(), ostream_iterator<string>(stream, "\n"));
  96.     }
  97.  
  98.     bool operator < (const Exam& exam) const
  99.     {
  100.         return name < exam.name;
  101.     }
  102.  
  103.     friend ostream& operator << (ostream& stream, const Exam& exam)
  104.     {
  105.         stream << exam.name << endl;
  106.  
  107.         //copy(exam.students.begin(), exam.students.end(), ostream_iterator<Student>(stream, "\n"));
  108.  
  109.         return stream;
  110.     }
  111.  
  112.     friend istream& operator >> (istream& stream, Exam& exam)
  113.     {
  114.         stream >> exam.name;
  115.  
  116.         //copy(istream_iterator<Student>(stream), istream_iterator<Student>(), back_inserter(exam.students));
  117.  
  118.         return stream;
  119.     }
  120. };
  121.  
  122. int main()
  123. {
  124.     Exam exam("exam.txt");
  125.  
  126.     //cout << exam << endl;
  127.  
  128.     auto group_map = exam.GetGroupMap();
  129.  
  130.     exam.out(cout, group_map, 1);
  131.  
  132.     system("pause");
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement