Advertisement
Guest User

ex10vectors

a guest
Dec 14th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <conio.h>
  4. #include <fstream>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. class CPerson
  11. {
  12.     string m_name;
  13.     string m_idn;
  14. public:
  15.     CPerson(string name, string idn) // explicit
  16.     {
  17.         m_name = name;
  18.         m_idn = idn;
  19.     }
  20.  
  21.     bool operator < (CPerson &obj) // sortirane v narastvash red
  22.     {
  23.         return m_idn < obj.m_idn;
  24.     }
  25.  
  26.     bool operator == (CPerson &obj) //tursene po IDN
  27.     {
  28.         return m_idn == obj.m_idn;
  29.     }
  30.  
  31.     friend ostream &operator <<(ostream &to, CPerson &obj) //izvejdane v potok
  32.     {
  33.         if (&to == &cout)
  34.         {
  35.             cout << obj.m_idn << " " << obj.m_name << endl;
  36.         }
  37.         else
  38.         {
  39.             to << obj.m_name << endl;
  40.             to << obj.m_idn << endl;
  41.         }
  42.         return to;
  43.     }
  44.      
  45.     friend istream &operator >> (istream &in, CPerson &obj) // vuvejdane v potok
  46.     {
  47.         in >> obj.m_name;
  48.         in >> obj.m_idn;
  49.         return in;
  50.     }
  51.  
  52.     string get_name() // funkcii za dostup
  53.     {
  54.         return m_name;
  55.     }
  56.  
  57.     string get_idn()
  58.     {
  59.         return m_idn;
  60.     }
  61. };
  62.  
  63. class CCity
  64. {
  65.     string m_city;
  66.     vector<CPerson> v; //vektor ot obekti I
  67. public:
  68.     CCity(string fname) //explicit - parameter ime na file - generira izkliuchenie
  69.     {
  70.         fstream file;
  71.         string tempname, tempidn;
  72.         file.open(fname, ios_base::in);
  73.         if (!file)
  74.         {
  75.             throw("Can't open file");
  76.         }
  77.         file >> m_city;
  78.         while (!file.eof())
  79.         {
  80.             file >> tempidn;
  81.             file >> tempname;
  82.             v.push_back(CPerson(tempname, tempidn));
  83.         }
  84.         file.close();
  85.     }
  86.  
  87.     void Output(ostream &to) // izvejdane na vektora na izhoden potok : predefinirane na operator<<
  88.     {
  89.         to << m_city << endl;
  90.         for (int i = 0; i < v.size(); i++)
  91.         {
  92.             to << v[i];
  93.         }
  94.     }
  95.    
  96.     vector<CPerson> duplicates() // izchislqva povtoreniqta, vrushta vector I
  97.     {
  98.         vector<CPerson> duplicates;
  99.         for (int i = 0; i < v.size() - 1; i++)
  100.         {
  101.             for (int j = i + 1; j < v.size(); j++)
  102.             {
  103.                 if (v[i] == v[j])
  104.                 {
  105.                     duplicates.push_back(v[i]);
  106.                 }
  107.             }
  108.         }
  109.         unique(duplicates.begin(), duplicates.end());
  110.         return duplicates;
  111.     }
  112.  
  113.     void RemoveDuplicates() // maha povtoreniq
  114.     {
  115.         sort(v.begin(), v.end());
  116.         auto last = unique(v.begin(), v.end());
  117.         v.erase(last, v.end());
  118.     }
  119.  
  120.     void removeVector(vector<CPerson> &toRemove) // premahvane ot vektora na elementi
  121.     {
  122.         bool found = false;
  123.         for (int i = 0; i < toRemove.size(); i++) {
  124.             found = false;
  125.             for (int j = 0; j < v.size(); j++)
  126.                 if (toRemove[i] == v[j])
  127.                 {
  128.                     if (found)
  129.                     {
  130.                         v.erase(v.begin() + j);
  131.                     }
  132.                     else
  133.                     {
  134.                         found = true;
  135.                     }
  136.                 }
  137.         }
  138.     }
  139.  
  140.     friend istream &operator >> (istream &in, CCity &obj) // chetene v potok
  141.     {
  142.         string tempidn, tempname;
  143.         in >> obj.m_city;
  144.         if (&in == &cin)
  145.         {
  146.             cout << "Input IDN: ";
  147.             in >> tempidn;
  148.             cout << "Input name";
  149.             in >> tempname;
  150.             obj.v.push_back(CPerson(tempname, tempidn));
  151.         }
  152.         else
  153.         {
  154.             in >> tempidn >> tempname;
  155.             obj.v.push_back(CPerson(tempname, tempidn));
  156.         }
  157.         return in;
  158.     }
  159. };
  160.  
  161.  
  162. int main()
  163. {
  164.     try
  165.     {
  166.         CCity obj("temp.txt");
  167.         cout << "Original values: " << endl;
  168.         obj.Output(cout);
  169.         cout << "Done!" << endl;
  170.  
  171.         cout << "\nDeleting duplicate values: " << endl;
  172.         //obj.removeVector(obj.duplicates());
  173.         obj.RemoveDuplicates();
  174.         cout << "Done!" << endl;
  175.  
  176.         cout << "\nVector without the duplicates: " << endl;
  177.         obj.Output(cout);
  178.     }
  179.     catch (string str)
  180.     {
  181.         cout << str << endl;
  182.     }
  183.  
  184.     _getch();
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement