Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <tuple>
- using namespace std;
- /// Перечислимый тип для статуса задачи
- enum class TaskStatus {
- NEW, // новая
- IN_PROGRESS, // в разработке
- TESTING, // на тестировании
- DONE // завершена
- };
- bool operator <(const TaskStatus& lhs, const TaskStatus& rhs){
- return tie(lhs) < tie(rhs);
- }
- /// Объявляем тип-синоним для map<TaskStatus, int>,
- /// позволяющего хранить количество задач каждого статуса
- using TasksInfo = map<TaskStatus, int>;
- map<string, TasksInfo> PersonTasks;
- class TeamTasks {
- public:
- /// Получить статистику по статусам задач конкретного разработчика
- const TasksInfo& GetPersonTasksInfo(const string& person) const{
- return (PersonTasks[person]);
- }
- /// Добавить новую задачу (в статусе NEW) для конкретного разработчитка
- void AddNewTask(const string& person){
- PersonTasks[person][TaskStatus::NEW]++;
- }
- /// Обновить статусы по данному количеству задач конкретного разработчика,
- /// подробности см. ниже
- tuple<TasksInfo, TasksInfo> PerformPersonTasks(
- const string& person, int task_count){
- TasksInfo tmp = PersonTasks[person];
- vector<int> v (1000);
- for(int i=0; i<task_count; ++i){
- map<TaskStatus, int> :: iterator it = tmp.begin();
- (it+i)->second = v[i];
- }
- }
- };
- // Принимаем словарь по значению, чтобы иметь возможность
- // обращаться к отсутствующим ключам с помощью [] и получать 0,
- // не меняя при этом исходный словарь
- void PrintTasksInfo(TasksInfo tasks_info) {
- cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
- ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
- ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
- ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
- }
- int main() {
- TeamTasks tasks;
- tasks.AddNewTask("Ilia");
- for (int i = 0; i < 3; ++i) {
- tasks.AddNewTask("Ivan");
- }
- cout << "Ilia's tasks: ";
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
- cout << "Ivan's tasks: ";
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
- TasksInfo updated_tasks, untouched_tasks;
- tie(updated_tasks, untouched_tasks) =
- tasks.PerformPersonTasks("Ivan", 2);
- cout << "Updated Ivan's tasks: ";
- PrintTasksInfo(updated_tasks);
- cout << "Untouched Ivan's tasks: ";
- PrintTasksInfo(untouched_tasks);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement