Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Lab_6.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
- //
- #include <iostream>
- #include "dynarr.hpp"
- #include <string>
- #include <algorithm>
- using namespace std;
- template <typename T>
- class hash_el {
- private:
- string key;
- T data;
- public:
- hash_el(string k, T d) {
- key = k;
- data = d;
- }
- hash_el() {};
- string getKey() { return key; }
- T getData() { return data; }
- };
- template <class T>
- class hash_table:public dynamic_array<T> {
- private:
- void expand() {
- dynamic_array<T>::max_size *= dynamic_array<T>::expander;
- T* temparr = new T[dynamic_array<T>::max_size];
- for (size_t i = 0; i < dynamic_array<T>::cur_size; i++)
- {
- temparr[hash(dynamic_array<T>::get(i).getKey())] = dynamic_array<T>::arr[i];
- }
- delete[]dynamic_array<T>::arr;
- dynamic_array<T>::arr = temparr;
- }
- int hash(string key)
- {
- int lenght = key.length();
- int index = 0;
- for (int i = 0; i < lenght; i++)
- {
- int x = lenght - i - 1;
- index = index + key[i] * pow(31, x);
- }
- index = index % dynamic_array<T>::max_size;
- return index;
- }
- public:
- void add(T data)
- {
- if (dynamic_array<T>::getCurrentSize() >= (float)dynamic_array<T>::getMaxSize() * 0.75) {
- expand();
- }
- dynamic_array<T>::arr[hash(data.getKey())] = data;
- dynamic_array<T>::cur_size++;
- }
- T get(string index) {
- if (hash(index) >= 0 || hash(index) <= dynamic_array<T>::cur_size)
- {
- if (dynamic_array<T>::arr[hash(index)].getKey() == index)
- return dynamic_array<T>::arr[hash(index)];
- }
- else
- {
- cout << "error";
- }
- }
- };
- int main()
- {
- hash_el<int> el1("ABA", 2);
- hash_el<int> el2("GWA", 3);
- hash_table<hash_el<int>>* test = new hash_table<hash_el<int>>;
- test->add(el1);
- test->add(el2);
- hash_el<int> tmp = test->get("GWA");
- cout << tmp.getData() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement