Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>//bug
- #include <string>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- #include <iomanip>
- //Сначала по фамилии, потом по году рождения, потом по должности с помощью быстрой сортировки.
- using namespace std;
- //В файле содержатся данные о сотрудниках предприятия: ФИО, должность,
- //дата рождения, стаж работы, зарплата (не менее 20 человек). В новый файл вывести
- //данные, отсортированные по какому-либо ключу
- struct worker
- {
- string surname;
- string name;
- string patronymic;
- string position;
- string birth_date;
- string exp;
- string salary;
- };
- string birthYear(string s)
- {
- return s.substr(s.length() - 4, 4);
- }
- void quickSort(vector<worker> &vec, int l, int r)
- {
- int mid = l + (r - l) / 2;
- int i = l;
- int j = r;
- while(i <= j)
- {
- while((vec[i].surname < vec[mid].surname) || (vec[i].surname == vec[mid].surname && birthYear(vec[i].birth_date) < birthYear(vec[mid].birth_date)) || (vec[i].surname == vec[mid].surname && birthYear(vec[i].birth_date) == birthYear(vec[mid].birth_date) && vec[i].position < vec[mid].position)) i++;
- while((vec[j].surname > vec[mid].surname) || (vec[j].surname == vec[mid].surname && birthYear(vec[j].birth_date) > birthYear(vec[mid].birth_date)) || (vec[j].surname == vec[mid].surname && birthYear(vec[j].birth_date) == birthYear(vec[mid].birth_date) && vec[j].position > vec[mid].position)) j--;
- if(i <= j)
- {
- swap(vec[i], vec[j]);
- i++;
- j--;
- }
- }
- if (i < r)
- quickSort(vec, i, r);
- if (l < j)
- quickSort(vec, l, j);
- }
- int main()
- {
- ifstream in("in.txt");
- ofstream out("out.txt");
- vector<worker> vec;
- while(in.peek() != EOF)
- {
- worker result;
- in >> result.surname >> result.name >> result.patronymic >> result.position >> result.birth_date >> result.exp >> result.salary;
- vec.push_back(result);
- }
- quickSort(vec, 0, vec.size() - 1);
- for(int i = 0; i < vec.size(); i++)
- {
- out << left << setw(20) << vec[i].surname << setw(20) << vec[i].name << setw(20) << vec[i].patronymic << setw(20) << vec[i].position << setw(20) << vec[i].birth_date << setw(20) << vec[i].exp << setw(20) << vec[i].salary << endl;
- }
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement