Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. // Lab_6.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3.  
  4. #include <iostream>
  5. #include "dynarr.hpp"
  6. #include <string>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10.  
  11. template <typename T>
  12. class hash_el {
  13. private:
  14.     string key;
  15.     T data;
  16. public:
  17.     hash_el(string k, T d) {
  18.         key = k;
  19.         data = d;
  20.     }
  21.     hash_el() {};
  22.     string getKey() { return key; }
  23.     T getData() { return data; }
  24. };
  25.  
  26. template <class T>
  27. class hash_table:public dynamic_array<T> {
  28. private:
  29.  
  30.  
  31.     void expand() {
  32.         dynamic_array<T>::max_size *= dynamic_array<T>::expander;
  33.  
  34.         T* temparr = new T[dynamic_array<T>::max_size];
  35.  
  36.         for (size_t i = 0; i < dynamic_array<T>::cur_size; i++)
  37.         {
  38.             temparr[hash(dynamic_array<T>::get(i).getKey())] = dynamic_array<T>::arr[i];
  39.         }
  40.         delete[]dynamic_array<T>::arr;
  41.         dynamic_array<T>::arr = temparr;
  42.     }
  43.    
  44.     int hash(string key)
  45.     {
  46.         int lenght = key.length();
  47.         int index = 0;
  48.  
  49.         for (int i = 0; i < lenght; i++)
  50.         {
  51.             int x = lenght - i - 1;
  52.             index = index + key[i] * pow(31, x);
  53.         }
  54.         index = index % dynamic_array<T>::max_size;
  55.  
  56.         return index;
  57.     }
  58. public:
  59.     void add(T data)
  60.     {
  61.  
  62.         if (dynamic_array<T>::getCurrentSize() >= (float)dynamic_array<T>::getMaxSize() * 0.75) {
  63.             expand();
  64.         }
  65.         dynamic_array<T>::arr[hash(data.getKey())] = data;
  66.         dynamic_array<T>::cur_size++;
  67.     }
  68.     T get(string index) {
  69.         if (hash(index) >= 0 || hash(index) <= dynamic_array<T>::cur_size)
  70.         {
  71.             if (dynamic_array<T>::arr[hash(index)].getKey() == index)
  72.                 return dynamic_array<T>::arr[hash(index)];
  73.         }
  74.         else
  75.         {
  76.             cout << "error";
  77.         }
  78.     }
  79. };
  80.  
  81.  
  82. int main()
  83. {
  84.     hash_el<int> el1("ABA", 2);
  85.     hash_el<int> el2("GWA", 3);
  86.  
  87.     hash_table<hash_el<int>>* test = new hash_table<hash_el<int>>;
  88.     test->add(el1);
  89.     test->add(el2);
  90.  
  91.     hash_el<int> tmp = test->get("GWA");
  92.  
  93.  
  94.     cout << tmp.getData() << endl;
  95.  
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement