Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <conio.h>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- class CPerson
- {
- string m_name;
- string m_idn;
- public:
- CPerson(string name, string idn) // explicit
- {
- m_name = name;
- m_idn = idn;
- }
- bool operator < (CPerson &obj) // sortirane v narastvash red
- {
- return m_idn < obj.m_idn;
- }
- bool operator == (CPerson &obj) //tursene po IDN
- {
- return m_idn == obj.m_idn;
- }
- friend ostream &operator <<(ostream &to, CPerson &obj) //izvejdane v potok
- {
- if (&to == &cout)
- {
- cout << obj.m_idn << " " << obj.m_name << endl;
- }
- else
- {
- to << obj.m_name << endl;
- to << obj.m_idn << endl;
- }
- return to;
- }
- friend istream &operator >> (istream &in, CPerson &obj) // vuvejdane v potok
- {
- in >> obj.m_name;
- in >> obj.m_idn;
- return in;
- }
- string get_name() // funkcii za dostup
- {
- return m_name;
- }
- string get_idn()
- {
- return m_idn;
- }
- };
- class CCity
- {
- string m_city;
- vector<CPerson> v; //vektor ot obekti I
- public:
- CCity(string fname) //explicit - parameter ime na file - generira izkliuchenie
- {
- fstream file;
- string tempname, tempidn;
- file.open(fname, ios_base::in);
- if (!file)
- {
- throw("Can't open file");
- }
- file >> m_city;
- while (!file.eof())
- {
- file >> tempidn;
- file >> tempname;
- v.push_back(CPerson(tempname, tempidn));
- }
- file.close();
- }
- void Output(ostream &to) // izvejdane na vektora na izhoden potok : predefinirane na operator<<
- {
- to << m_city << endl;
- for (int i = 0; i < v.size(); i++)
- {
- to << v[i];
- }
- }
- vector<CPerson> duplicates() // izchislqva povtoreniqta, vrushta vector I
- {
- vector<CPerson> duplicates;
- for (int i = 0; i < v.size() - 1; i++)
- {
- for (int j = i + 1; j < v.size(); j++)
- {
- if (v[i] == v[j])
- {
- duplicates.push_back(v[i]);
- }
- }
- }
- unique(duplicates.begin(), duplicates.end());
- return duplicates;
- }
- void RemoveDuplicates() // maha povtoreniq
- {
- sort(v.begin(), v.end());
- auto last = unique(v.begin(), v.end());
- v.erase(last, v.end());
- }
- void removeVector(vector<CPerson> &toRemove) // premahvane ot vektora na elementi
- {
- bool found = false;
- for (int i = 0; i < toRemove.size(); i++) {
- found = false;
- for (int j = 0; j < v.size(); j++)
- if (toRemove[i] == v[j])
- {
- if (found)
- {
- v.erase(v.begin() + j);
- }
- else
- {
- found = true;
- }
- }
- }
- }
- friend istream &operator >> (istream &in, CCity &obj) // chetene v potok
- {
- string tempidn, tempname;
- in >> obj.m_city;
- if (&in == &cin)
- {
- cout << "Input IDN: ";
- in >> tempidn;
- cout << "Input name";
- in >> tempname;
- obj.v.push_back(CPerson(tempname, tempidn));
- }
- else
- {
- in >> tempidn >> tempname;
- obj.v.push_back(CPerson(tempname, tempidn));
- }
- return in;
- }
- };
- int main()
- {
- try
- {
- CCity obj("temp.txt");
- cout << "Original values: " << endl;
- obj.Output(cout);
- cout << "Done!" << endl;
- cout << "\nDeleting duplicate values: " << endl;
- //obj.removeVector(obj.duplicates());
- obj.RemoveDuplicates();
- cout << "Done!" << endl;
- cout << "\nVector without the duplicates: " << endl;
- obj.Output(cout);
- }
- catch (string str)
- {
- cout << str << endl;
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement