Я не використовув черги, тому не знаю, як реалізувати це через priority_queue.Можете використати вектори, ось, що я спробував зробити, використовуючи вектор
#include <iostream>
#include <vector>
using namespace std;
class Human{
string name, surname, middlename;
int day, month, year;
public:
Human(const string& name, const string& surname, const string& middlename){
this->name = name;
this->surname = surname;
this->middlename = middlename;
}
Human(const string& name, const string& surname, const string& middlename, const int& day, const int& month, const int& year){
this->name = name;
this->surname = surname;
this->middlename = middlename;
this->day = day;
this->month = month;
this->year = year;
}
Human(){}
void SetDate(const int& day, const int& month, const int& year){
this->day = day;
this->month = month;
this->year = year;
}
void GetDate(){
cout << "Дата рождения: " << day << "." << month << "." << year << endl;
}
void SetName(const string& name, const string& surname, const string& middlename){
this->name = name;
this->surname = surname;
this->middlename = middlename;
}
void GetName(){
cout << "Имя: " << name << " " << surname << " " << middlename << endl;
}
virtual void GetInfo(){
Human::GetName();
Human::GetDate();
}
friend ostream& operator<< (ostream &out, const Human &human);
friend istream& operator>> (istream &in, Human &human);
};
class Worker : public Human{
int payroll_number = 0; // табельний номер
int salary = 0; // оклад
int length_of_service = 0; // стаж
int count_hours = 0; // кількість відпрацьованих годин
int salary_one_hour = 0; // зарплата за годину
public:
Worker(){}
Worker(const string& name, const string& surname, const string& middlename)
: Human(name, surname, middlename){}
Worker(const string& name, const string& surname, const string& middlename, const int& day, const int& month, const int& year)
: Human(name, surname, middlename, day, month, year){}
void SetWorker(const int& payroll_number, const int& salary, const int& length_of_service, const int& count_hours, const int& salary_one_hour){
this->payroll_number = payroll_number;
this->salary = salary;
this->length_of_service = length_of_service;
this->count_hours = count_hours;
this->salary_one_hour = salary_one_hour;
}
int GetSalary(){return salary;}
int GetLengthService(){return length_of_service;}
virtual void GetInfo(){
Human::GetInfo();
cout << "Табельний номер сотрудника: " << payroll_number << endl;
cout << "Оклад: " << salary << " грн" << endl;
cout << "Стаж: " << length_of_service << " лет" << endl;
cout << "Количество отработаных часов: " << count_hours << endl;
cout << "Зарплата за час: " << salary_one_hour << " грн" << endl;
}
void operator= (const Worker &worker){
payroll_number = worker.payroll_number;
salary = worker.salary;
length_of_service = worker.length_of_service;
count_hours = worker.count_hours;
salary_one_hour = worker.salary_one_hour;
}
friend istream& operator>> (istream &in, Worker &worker);
};
istream& operator>> (istream &in, Human &human){
cout << "Введите имя: ";
in >> human.name;
cout << "Введите фамилию: ";
in >> human.surname;
cout << "Введите отчество: ";
in >> human.middlename;
cout << "Введите день, месяц, год рождения через пробел: ";
in >> human.day >> human.month >> human.year;
return in;
}
istream& operator>> (istream &in, Worker &worker){
cout << "Введите табельний номер: ";
in >> worker.payroll_number;
return in;
}
class Salary{
vector <Worker> workers;
vector <double> salary;
public:
vector <double> ArraySalary(){
return salary;
}
Salary(vector <Worker>& worker){
workers = worker;
}
void GetSalary(){
cout << "Зарплаты людей: " << endl;
for(auto& i : workers){
double salary_ = double(i.GetSalary()) / i.GetLengthService() / 12;
i.GetName();
cout << "Зарплата: " << salary_ << "." << endl;
salary.push_back(salary_);
}
}
};
double HighestSalary(Salary sal){ // Функция для получения максимальной зарплаты её вызву через пізнє зв'язування
vector <double> salary = sal.ArraySalary();
double result = salary[0];
for(const auto& i : salary){
if(i > result)
result = i;
}
return result;
}
int main(){
vector <Worker> workers;
Worker worker("Victor", "Victorov", "Victorovich", 1, 1, 1900);
worker.SetWorker(14, 1200000, 5, 900, 2000);
workers.push_back(worker);
worker.SetName("Anna", "Anivna", "Anivnovicha");
worker.SetWorker(14, 1400000, 5, 900, 2000);
workers.push_back(worker);
Human &human = worker;
human.GetInfo();
cout << endl;
Salary salary(workers);
salary.GetSalary();
double (*func)(Salary) = HighestSalary;
double highestsalary = func(salary);
cout << endl << "Самая большая зарплата: " << highestsalary << endl;
return 0;
}