Тема: C++ priority queue

Добрий день, можете пояснити як написати клас priority_queue так щоб він працював

#include <iostream>
#include <queue>
#include <set>

using namespace std;

class Osoba
{
    private:
    int name;
    int surname;
    int middlename;
    int date;
    int day;
    int month;
    int year;
public:
void messege()
{
    cout << "data about OSOBA"<< endl;
}

void setInfo(int Info_name, int Info_surname, int Info_middlename)
{
    name = Info_name;
    surname = Info_surname;
    middlename = Info_middlename;
}
void getInfo() 
    {
        cout << "Info: " << name << "." << surname << "." << middlename << endl;
    }
void setDate(int date_day, int date_month, int date_year)
{
    day = date_day;
    month = date_month;
    year = date_year;
}
void getDate() 
    {
        cout << "Date: " << day << "." << month << "." << year << endl;
    }
};


class worker
{
private: 
int experience;
int hours;
int payforhour;
int payroll; 
public:
void messege()
{
cout << "data about worker"<< endl;
}

void setPayinfo(int Payinfo_experience, int Payinfo_hours, int Payinfo_payforhour, int Payinfo_payroll)
{
experience = Payinfo_experience;
hours =  Payinfo_hours;
payforhour =  Payinfo_payforhour;
payroll = Payinfo_payroll;
}

void getPayinfo()
{
cout << "Payinfo: " << experience << "." << hours << "." << payforhour << "." << payroll << endl;
}
};

void print(priority_queue<set<worker> > priorityQueue)
{
    while (!priorityQueue.empty()) {
     set<worker> st = priorityQueue.top();
 
        cout << "[ ";
        for (auto element : st)
            cout << element << ' ';
        cout << ']';
        cout << '\n';
         priorityQueue.pop();
    }
}


int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus");
    priority_queue<set<int> > priorityQueue;
    set<worker> set1;
    set1.insert(2);
    set1.insert(8);
    set1.insert(50);
    set1.insert(40);
    priorityQueue.push(set1);
    int experience, hours, payforhour, payroll;
    int name, surname, middlename, day, month, year;
    cout << "Введите данные про особу"<< endl;
    cout << "Имя"<< endl;
    cout << "Фамилия"<< endl;
    cout << "Отчество"<< endl;
    cout << "Введите данные про день рождения"<< endl;
    cout << "день"<< endl;
    cout << "месяц"<< endl;
    cout << "год"<< endl;
    cout << "Опыт"<< endl;
    cout << "Часы роботы"<< endl;
    cout << "Зарплата за час"<< endl;
    cout << "табельный оклад"<< endl;
    worker objworker;
    Osoba objOsoba;
    objOsoba.messege();
    objOsoba.setInfo(name, surname, middlename);
    objOsoba.getInfo();
    objOsoba.setDate(day, month, year);
    objOsoba.getDate();
    objworker.messege();
   objworker.setPayinfo(experience, hours, payforhour, payroll);
   objworker.getPayinfo();
  
   return 0;
};

2

Re: C++ priority queue

Вам кацапська в коді не муляє?

3

Re: C++ priority queue

FakiNyan написав:

Вам кацапська в коді не муляє?

вибачте таке завдання

4

Re: C++ priority queue

а де ви вчитеся, і хто викладач?

5

Re: C++ priority queue

FakiNyan написав:

а де ви вчитеся, і хто викладач?

ви можете відповісти на моє питання по коду чи ні?

6 Востаннє редагувалося koala (06.04.2022 11:59:53)

Re: C++ priority queue

misha.sokolenko2004 написав:
FakiNyan написав:

Вам кацапська в коді не муляє?

вибачте таке завдання

Повний текст завдання, будь ласка, наведіть. Бо якщо хтось спробує вам допомогти - то ви ж після цього напишете "ні, в завданні ще отак і отак сказано, а не як у вас", і це нескінченно.

Ну і одразу напишіть, чим саме вас не влаштовує ваш код. Якщо там компілятор пише про помилку, яку ви не можете виправити - яку саме. Якщо поведінка програми відрізняється від очікуваної - чим саме.

Подякували: leofun011

7

Re: C++ priority queue

koala написав:
misha.sokolenko2004 написав:
FakiNyan написав:

Вам кацапська в коді не муляє?

вибачте таке завдання

Повний текст завдання, будь ласка, наведіть. Бо якщо хтось спробує вам допомогти - то ви ж після цього напишете "ні, в завданні ще отак і отак сказано, а не як у вас", і це нескінченно.

Ну і одразу напишіть, чим саме вас не влаштовує ваш код. Якщо там компілятор пише про помилку, яку ви не можете виправити - яку саме. Якщо поведінка програми відрізняється від очікуваної - чим саме.

Створити клас ОСОБА (прізвище, ім'я, по батькові, дата народження, стать та ін.).
Визначити конструктори ініціалізації, копіювання, деструктори та методи для зміни і читання значень полів даного класу.
Перевантажити операцію () для встановлення значень полів даних, операцію присвоєння об'єктів =, потокові операції введення >> та виведення << об'єктів.
Створити похідний клас СПІВРОБІТНИК з додатковими полями: табельний номер, оклад, стаж роботи, кількість відпрацьованих годин, зарплата за годину роботи. Визначити необхідні дані, методи, конструктори та деструктори, методи або операторні функції введення-виведення.
У межах ієрархії класів побудувати поліморфічний кластер на основі віртуального методу читання прізвища або табельного номера співробітника. Продемонструвати механізм пізнього зв'язування.
Розробити клас ЗАРПЛАТА, у закритій частині якого розміщено список об'єктів з даними про співробітників, для яких розраховується зарплата. Обчислити зарплату співробітників.
Для роботи з масивом об'єктів використати контейнерний клас.

8

Re: C++ priority queue

У завданні нічого немає про московитську мову, нащо ви брешете?

9

Re: C++ priority queue

Я не використовув черги, тому не знаю, як реалізувати це через 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;
}