Kwwiker

вот как-то так

Nov 7th, 2021
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. struct HashNode {
  2.     long long key = 0;
  3.     int offset = 0;
  4. };
  5.  
  6. class HashTable
  7. {
  8. private:
  9.     int size;
  10.     int countOfNotes = 0;
  11.     int countOfAdd = 0;
  12.     list<HashNode>* table;
  13. public:
  14.     HashTable(int size)
  15.     {
  16.         this->size = size;
  17.         table = new list<HashNode>[size];
  18.     }
  19.     void insert(long long key, int offset)
  20.     {
  21.         HashNode node;
  22.         node.key = key;
  23.         node.offset = offset;
  24.         int index = hashFunction(key);
  25.         table[index].push_back(node);
  26.  
  27.         countOfNotes++;
  28.         countOfAdd++;
  29.  
  30.         if (countOfNotes / size > 0.75) {
  31.             rehash();
  32.         }
  33.     }
  34.     int hashFunction(int key)
  35.     {
  36.         return key % size;
  37.     }
  38.  
  39.     void rehash() {
  40.         HashTable newHT(size * 2);
  41.         for (int i = 0; i < size; i++) {
  42.             for (HashNode node : table[i]) {
  43.                 newHT.insert(node.key, node.offset);
  44.             }
  45.         }
  46.         size = size * 2;
  47.         table = newHT.table;
  48.     }
  49. };
  50.  
  51.     template<typename T>
  52.     bool insertFromFile(T& container) {
  53.         ifstream file(fileName, ios::binary);
  54.         if (file) {
  55.             for (size_t i = 0; i < fileSize; i++) {
  56.                 Car car;
  57.                 file.read((char*)&car, sizeof(Car));
  58.                 container.insert(car.num, i);
  59.             }
  60.         }
  61.         else {
  62.             return false;
  63.         }
  64.         file.close();
  65.         return true;
  66.     }
Advertisement
Add Comment
Please, Sign In to add comment