Advertisement
thouxanbanuno

qweqdwdwq

Mar 2nd, 2021
1,049
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <tuple>
  5. using namespace std;
  6. /// Перечислимый тип для статуса задачи
  7. enum class TaskStatus {
  8.   NEW,          // новая
  9.   IN_PROGRESS,  // в разработке
  10.   TESTING,      // на тестировании
  11.   DONE          // завершена
  12. };
  13.  
  14. bool operator <(const TaskStatus& lhs, const TaskStatus& rhs){
  15.     return tie(lhs) < tie(rhs);
  16. }
  17. /// Объявляем тип-синоним для map<TaskStatus, int>,
  18. /// позволяющего хранить количество задач каждого статуса
  19. using TasksInfo = map<TaskStatus, int>;
  20. map<string, TasksInfo> PersonTasks;
  21. class TeamTasks {
  22. public:
  23.   /// Получить статистику по статусам задач конкретного разработчика
  24.   const TasksInfo& GetPersonTasksInfo(const string& person) const{
  25.     return (PersonTasks[person]);
  26.   }
  27.  
  28.   /// Добавить новую задачу (в статусе NEW) для конкретного разработчитка
  29.   void AddNewTask(const string& person){
  30.     PersonTasks[person][TaskStatus::NEW]++;
  31.   }
  32.  
  33.   /// Обновить статусы по данному количеству задач конкретного разработчика,
  34.   /// подробности см. ниже
  35.   tuple<TasksInfo, TasksInfo> PerformPersonTasks(
  36.       const string& person, int task_count){
  37.       TasksInfo tmp = PersonTasks[person];
  38.       vector<int> v (1000);
  39.       for(int i=0; i<task_count; ++i){
  40.          map<TaskStatus, int> :: iterator it = tmp.begin();
  41.             (it+i)->second = v[i];
  42.       }
  43.     }
  44. };
  45. // Принимаем словарь по значению, чтобы иметь возможность
  46. // обращаться к отсутствующим ключам с помощью [] и получать 0,
  47. // не меняя при этом исходный словарь
  48. void PrintTasksInfo(TasksInfo tasks_info) {
  49.   cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
  50.       ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
  51.       ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
  52.       ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
  53. }
  54.  
  55. int main() {
  56.   TeamTasks tasks;
  57.   tasks.AddNewTask("Ilia");
  58.   for (int i = 0; i < 3; ++i) {
  59.     tasks.AddNewTask("Ivan");
  60.   }
  61.   cout << "Ilia's tasks: ";
  62.   PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
  63.   cout << "Ivan's tasks: ";
  64.   PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
  65.  
  66. TasksInfo updated_tasks, untouched_tasks;
  67.  
  68.   tie(updated_tasks, untouched_tasks) =
  69.       tasks.PerformPersonTasks("Ivan", 2);
  70.   cout << "Updated Ivan's tasks: ";
  71.   PrintTasksInfo(updated_tasks);
  72.   cout << "Untouched Ivan's tasks: ";
  73.   PrintTasksInfo(untouched_tasks);
  74.   return 0;
  75. }
  76.  
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement