Advertisement
Infiniti_Inter

Задание 12, стр.35

Apr 10th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <vector>
  5. #include <stdarg.h>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10.  
  11. class CD{
  12.  
  13.  
  14. vector<string> compositions;
  15.  
  16. public:
  17.     string name;
  18.     CD(string name)
  19.     {
  20.     this->name = name;
  21.     }
  22.     ~CD(){compositions.clear();}
  23.     vector<string>::iterator begin()
  24.     {
  25.         return compositions.begin();
  26.     }
  27.      vector<string>::iterator end()
  28.     {
  29.         return compositions.end();
  30.     }
  31.     string pick(int i)
  32.     {
  33.         return compositions[i];
  34.     }
  35.     int getSize(){
  36.         return compositions.size();
  37.     }
  38.     void add(string title)
  39.     {
  40.            compositions.push_back(title);
  41.     }
  42.     void pop(string title){
  43.         compositions.erase(find(compositions.begin(), compositions.end(), title));
  44.     }
  45.     void print(){
  46.         if (compositions.size() > 0)
  47.             cout << name + ": \n" << endl;
  48.         for(int i = 0; i < (int)compositions.size(); i++)
  49.             cout << " -" << compositions[i] << endl;
  50.     }
  51. };
  52.  bool operator < (CD a, CD b)
  53.     {
  54.         int n = a.getSize();
  55.         if (n > b.getSize())
  56.             return false;
  57.         if (n < b.getSize())
  58.             return true;
  59.         for(int i = 0; i < n; ++i)
  60.             {
  61.                 if (a.pick(i) == b.pick(i))
  62.                     continue;
  63.                 if (a.pick(i) < b.pick(i))
  64.                     return true;
  65.                 return false;
  66.             }
  67.     }
  68.     bool operator == (CD a, CD b){
  69.         if (a.getSize() != b.getSize())
  70.             return false;
  71.         sort(a.begin(), a.end());
  72.         sort(b.begin(), b.end());
  73.         int n = a.getSize();
  74.         for(int i = 0; i < n; ++i)
  75.             if (a.pick(i) != b.pick(i))
  76.                 return false;
  77.         return true;
  78.     }
  79.  
  80. class Catalog{
  81.     vector<CD> cd;
  82.  
  83. public:
  84.     Catalog(){}
  85.     ~Catalog(){cd.clear();}
  86.  
  87.     void add(CD cd){
  88.         this->cd.push_back(cd);
  89.     }
  90.     void pop(CD cd){
  91.         this->cd.erase(find(this->cd.begin(), this->cd.end(), cd));
  92.     }
  93.     void pop_track(string CD_name, string trackName){
  94.         int n = cd.size();
  95.         for(int i = 0; i < n; ++i)
  96.             if (cd[i].name == CD_name)
  97.                 cd[i].pop(trackName);
  98.  
  99.     }
  100.     void print(){
  101.         int n = cd.size();
  102.         for(int i = 0; i < n; i++)
  103.             {
  104.                 cd[i].print();
  105.                 cout << endl;
  106.             }
  107.     }
  108.     void print(string CD_name){
  109.         int n = cd.size();
  110.         for(int i = 0; i < n; ++i)
  111.             if (cd[i].name == CD_name)
  112.                 cd[i].print();
  113.     }
  114.  
  115. };
  116.  
  117.  
  118. int main()
  119. {
  120.     Catalog myCatalog;
  121.     CD Noize("Noize"), Letov("Letov");
  122.     Noize.add("Sea");
  123.     Noize.add("Work");
  124.     Letov.add("Def");
  125.     myCatalog.add(Noize);
  126.     myCatalog.add(Letov);
  127.     myCatalog.print();
  128.     cout << endl << endl;
  129.     myCatalog.pop_track("Noize", "Sea");
  130.     myCatalog.print();
  131.     cout << endl << endl;
  132.     myCatalog.print("Noize");
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement