Advertisement
999ms

Set

Jul 5th, 2020
1,327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. class TSampleSet {
  2.     std::vector<int> values;
  3.     std::unordered_map<int, size_t> valueToIndex;
  4.    
  5.     void insert(int x) {
  6.         if (valueToIndex.count(x)) {
  7.             return;
  8.         }
  9.         valueToIndex[x] = std::size(values);
  10.         values.push_back(x);    
  11.     }
  12.  
  13.     void remove(int x) {
  14.         if (!valueToIndex.count(x)) {
  15.             return;
  16.         }
  17.         auto it = valueToIndex.find(x);
  18.         size_t currentIndex = it->second;
  19.         valueToIndex.remove(it);
  20.         if (currentIndex + 1 == std::size(values)) {
  21.             values.pop_back();
  22.             return;
  23.         }
  24.    
  25.         std::swap(values.back(), values[currentIndex]);        
  26.         valueToIndex[values[currentIndex]] = currentIndex;
  27.        
  28.         values.pop_back();
  29.     }
  30.  
  31.     bool contains(int x) const {
  32.         return valueToIndex.count(x) > 0;    
  33.     }
  34.  
  35.     int sample() {
  36.         return values[rand() % std::size(values)];    
  37.     }
  38.    
  39. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement