Advertisement
avr39-ripe

randomHash

May 29th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <chrono>
  3. #include <functional>
  4.  
  5. const int maxTry = 200;
  6.  
  7. struct Hash
  8. {
  9.     uint16_t key;
  10.     uint16_t value;
  11. };
  12.  
  13. void initHash(Hash** hashArr)
  14. {
  15.     for (int i = 0; i < maxTry; i++)
  16.     {
  17.         hashArr[i] = nullptr;
  18.     }
  19. }
  20. int incrementHash(Hash** hashArr, uint16_t key)
  21. {
  22.     int i = 0;
  23.     for (; hashArr[i] and (i < maxTry); i++)
  24.     {
  25.         if (hashArr[i]->key == key)
  26.         {
  27.             hashArr[i]->value++;
  28.             return 0;
  29.         }
  30.     }
  31.     hashArr[i] = new Hash{ key,1 };
  32.     return 1;
  33. }
  34.  
  35. void trashHash(Hash** hashArr)
  36. {
  37.     int i = 0;
  38.     for (; hashArr[i] and (i < maxTry); i++)
  39.     {
  40.         delete hashArr[i];
  41.     }
  42. }
  43.  
  44. void printHash(Hash** hashArr)
  45. {
  46.     int i = 0;
  47.     for (; hashArr[i] and (i < maxTry); i++)
  48.     {
  49.         std::cout << hashArr[i]->key << " : " << hashArr[i]->value << "\n";
  50.     }
  51. }
  52.  
  53. int sizeHash(Hash** hashArr)
  54. {
  55.     int i = 0;
  56.     for (; hashArr[i] and (i < maxTry); i++);
  57.     return i;
  58. }
  59.  
  60. template <typename T> int sortUp(T a, T b)
  61. {
  62.     return a->value < b->value;
  63. }
  64.  
  65. template <typename T> int sortDown(T a, T b)
  66. {
  67.     return a->value > b->value;
  68. }
  69.  
  70. template <typename T> void sortArr(T* arr, int arrSize, std::function<int(T, T)> sortCrit)
  71. {
  72.  
  73.     for (int head = 0; head < arrSize; head++)
  74.     {
  75.         for (int tail = arrSize - 1; tail > head; tail--)
  76.         {
  77.  
  78.             if (sortCrit(arr[tail], arr[head]))
  79.             {
  80.                 T tmp = arr[tail];
  81.                 arr[tail] = arr[head];
  82.                 arr[head] = tmp;
  83.  
  84.             }
  85.         }
  86.  
  87.     }
  88. }
  89.  
  90. int main()
  91. {
  92.     srand(time(0));
  93.    
  94.     Hash* randomHash[maxTry];
  95.  
  96.     initHash(randomHash);
  97.  
  98.     for (int i = 0; i < maxTry; i++)
  99.     {
  100.         incrementHash(randomHash, (uint16_t) (rand() % 1000));
  101.     }
  102.  
  103. //  printHash(randomHash);
  104.  
  105.     std::cout << sizeHash(randomHash) << "\n";
  106.  
  107.     sortArr<Hash*>(randomHash, sizeHash(randomHash), sortDown<Hash*>);
  108.  
  109.     printHash(randomHash);
  110.  
  111.     trashHash(randomHash);
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement