shizaero

Untitled

Jun 26th, 2023
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <algorithm>
  2. #include <deque>
  3. #include <string>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. struct Ticket {
  9.     int id;
  10.     string name;
  11. };
  12.  
  13. class TicketOffice {
  14. public:
  15.     // добавить билет в систему
  16.     void PushTicket(const string& name) {
  17.         tickets_.push_back({last_id_, name});
  18.         ++last_id_;
  19.     }
  20.  
  21.     // получить количество доступных билетов
  22.     int GetAvailable() const {
  23.         return tickets_.size();
  24.     }
  25.  
  26.     // получить количество доступных билетов определённого типа
  27.     int GetAvailable(const string& name) const {
  28.         return count_if(tickets_.begin(), tickets_.end(),
  29.                     [&name](const Ticket& t){
  30.                         return t.name == name;
  31.                     });
  32.     }
  33.  
  34.     // отозвать старые билеты (до определённого id)
  35.     void Invalidate(int minimum) {
  36.         for(int i = 0; i < minimum; ++i){
  37.             tickets_.erase(tickets_.begin() + i);
  38.         }
  39.     }
  40.  
  41. private:
  42.     int last_id_ = 0;
  43.     deque<Ticket> tickets_;
  44. };
  45.  
  46. int main(){
  47.     TicketOffice tickets;
  48.  
  49. tickets.PushTicket("Swan Lake"); // id - 0
  50. tickets.PushTicket("Swan Lake"); // id - 1
  51. tickets.PushTicket("Boris Godunov"); // id - 2
  52. tickets.PushTicket("Boris Godunov"); // id - 3
  53. tickets.PushTicket("Swan Lake"); // id - 4
  54. tickets.PushTicket("Boris Godunov"); // id - 5
  55. tickets.PushTicket("Boris Godunov"); // id - 6
  56.  
  57. cout << tickets.GetAvailable() << endl; // Вывод: 7
  58. cout << tickets.GetAvailable("Swan Lake") << endl; // Вывод: 3
  59. cout << tickets.GetAvailable("Boris Godunov") << endl; // Вывод: 4
  60.  
  61. // Invalidate удалит билеты с номерами 0, 1, 2:
  62. tickets.Invalidate(3);
  63.  
  64. cout << tickets.GetAvailable() << endl; // Вывод: 4
  65. cout << tickets.GetAvailable("Swan Lake") << endl; // Вывод: 1
  66. cout << tickets.GetAvailable("Boris Godunov") << endl; // Вывод: 3
  67.  
  68. tickets.PushTicket("Swan Lake"); // id - 7
  69. tickets.PushTicket("Swan Lake"); // id - 8
  70.  
  71. cout << tickets.GetAvailable("Swan Lake") << endl; // Вывод: 3
  72. }
Advertisement
Add Comment
Please, Sign In to add comment