Advertisement
Guest User

Untitled

a guest
Aug 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include "test_runner.h"
  2. #include "profile.h"
  3.  
  4. #include <algorithm>
  5. #include <array>
  6. #include <iostream>
  7. #include <random>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. template <typename TAirport>
  13. class AirportCounter {
  14. public:
  15.     using Item = pair<TAirport, size_t>;
  16.     using Items = vector<Item>;
  17.  
  18.     AirportCounter()
  19.     {
  20.         //if(data.size() != static_cast<uint32_t>(TAirport::Last_)) {
  21.         //  data.resize(static_cast<uint32_t>(TAirport::Last_));
  22.         //}
  23.  
  24.         if(data.size() == 0) {
  25.             data.resize(static_cast<uint32_t>(TAirport::Last_));
  26.         }
  27.     }
  28.  
  29.   template <typename TIterator>
  30.   AirportCounter(TIterator begin, TIterator end)
  31.   {
  32.      // if (data.size() != static_cast<uint32_t>(TAirport::Last_)) {
  33.         //  data.resize(static_cast<uint32_t>(TAirport::Last_));
  34.       //}
  35.  
  36.       if(data.size() == 0) {
  37.           data.resize(static_cast<uint32_t>(TAirport::Last_));
  38.       }
  39.  
  40.       for (auto it = begin; it != end; it++) {
  41.           data[static_cast<size_t>(*it)]++;
  42.       }
  43.   }
  44.  
  45.   size_t Get(TAirport airport) const
  46.   {
  47.       return data[static_cast<size_t>(airport)];
  48.   }
  49.  
  50.   void Insert(TAirport airport)
  51.   {
  52.       data[static_cast<size_t>(airport)]++;
  53.   }
  54.  
  55.   void EraseOne(TAirport airport)
  56.   {
  57.       if (data[static_cast<size_t>(airport)] != 0) {
  58.           data[ static_cast<size_t>(airport)]--;
  59.       }
  60.   }
  61.  
  62.   void EraseAll(TAirport airport)
  63.   {
  64.       data[ static_cast<size_t>(airport)] = 0;
  65.   }
  66.  
  67.   Items GetItems() const
  68.   {
  69.       vector<Item> res;
  70.  
  71.       res.resize(static_cast<uint32_t>(TAirport::Last_));
  72.  
  73.       for (int i = 0; i < data.size(); i++) {
  74.           res[i] = make_pair(static_cast<TAirport>(i), data[i]);
  75.      }
  76.  
  77.       return res;
  78.   }
  79.  
  80. private:
  81.   vector<size_t> data;
  82.   vector<Item> ports;
  83. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement