Hash table in C++ are data structures that allow quick storage and retrieval of key-value pairs. They use a hash function to map keys to indices, providing fast access and constant time complexity for operations like insertion, search, and deletion.
A hash function in C++ converts data (e.g., strings or objects) into a numeric value (hash code). It’s used to find where to store data in a hash table, ensuring quick data retrieval.
In C++, hash table operations involve various tasks for efficient data handling:
- Insertion: Adding key-value pairs to the table.
- Search: Finding values using corresponding keys.
- Deletion: Removing key-value pairs as needed.
- Resizing: Adjusting table size to optimize performance.
- Collision Handling: Managing situations when multiple keys map to the same index.
- Load Factor Maintenance: Ensuring an optimal balance between elements and table size.
- Traversal: Iterating through key-value pairs to access or process data.
- Clearing: Emptying the hash table by removing all elements.
Here is source code of the C++ Program to demonstrate Hash Table. The C++ program is successfully compiled and run on a Linux system. The program output is also shown below.
/* *C++ Program to Implement Hash Table */ #include<iostream> #include<cstdlib> #include<string> #include<cstdio> using namespace std; const int TABLE_SIZE = 128; /* * HashEntry Class Declaration */ class HashEntry { public: int key; int value; HashEntry(int key, int value) { this->key = key; this->value = value; } }; /* * HashMap Class Declaration */ class HashMap { private: HashEntry **table; public: HashMap() { table = new HashEntry * [TABLE_SIZE]; for (int i = 0; i< TABLE_SIZE; i++) { table[i] = NULL; } } /* * Hash Function */ int HashFunc(int key) { return key % TABLE_SIZE; } /* * Insert Element at a key */ void Insert(int key, int value) { int hash = HashFunc(key); while (table[hash] != NULL && table[hash]->key != key) { hash = HashFunc(hash + 1); } if (table[hash] != NULL) delete table[hash]; table[hash] = new HashEntry(key, value); } /* * Search Element at a key */ int Search(int key) { int hash = HashFunc(key); while (table[hash] != NULL && table[hash]->key != key) { hash = HashFunc(hash + 1); } if (table[hash] == NULL) return -1; else return table[hash]->value; } /* * Remove Element at a key */ void Remove(int key) { int hash = HashFunc(key); while (table[hash] != NULL) { if (table[hash]->key == key) break; hash = HashFunc(hash + 1); } if (table[hash] == NULL) { cout<<"No Element found at key "<<key<<endl; return; } else { delete table[hash]; } cout<<"Element Deleted"<<endl; } ~HashMap() { for (int i = 0; i < TABLE_SIZE; i++) { if (table[i] != NULL) delete table[i]; delete[] table; } } }; /* * Main Contains Menu */ int main() { HashMap hash; int key, value; int choice; while (1) { cout<<"\n----------------------"<<endl; cout<<"Operations on Hash Table"<<endl; cout<<"\n----------------------"<<endl; cout<<"1.Insert element into the table"<<endl; cout<<"2.Search element from the key"<<endl; cout<<"3.Delete element at a key"<<endl; cout<<"4.Exit"<<endl; cout<<"Enter your choice: "; cin>>choice; switch(choice) { case 1: cout<<"Enter element to be inserted: "; cin>>value; cout<<"Enter key at which element to be inserted: "; cin>>key; hash.Insert(key, value); break; case 2: cout<<"Enter key of the element to be searched: "; cin>>key; if (hash.Search(key) == -1) { cout<<"No element found at key "<<key<<endl; continue; } else { cout<<"Element at key "<<key<<" : "; cout<<hash.Search(key)<<endl; } break; case 3: cout<<"Enter key of the element to be deleted: "; cin>>key; hash.Remove(key); break; case 4: exit(1); default: cout<<"\nEnter correct option\n"; } } return 0; }
1. The program includes necessary header files for input/output, string manipulation, and standard library.
2. It defines a HashEntry class to represent key-value pairs stored in the hash table, with each entry having a key and a value.
3. The HashMap class is used to manage the hash table, with a private member “table” representing an array of pointers to HashEntry objects.
4. The hash function (HashFunc()) calculates the index based on the key using the modulo operator (%).
5. Insert(), Search(), and Remove() functions allow users to perform basic hash table operations.
6. The program offers a menu-driven interface to interact with the hash table, enabling users to insert, search, or remove elements using their keys.
7. Linear probing is utilized for handling key collisions.
Time Complexity:
- Insertion: The average time complexity for insertion is O(1). However, in the worst case scenario where many collisions occur, it can be O(n) due to linear probing, where n is the number of elements in the table.
- Search: The average and worst-case time complexity for search is also O(1), but in case of collisions, it can be O(n).
- Deletion: Similar to search and insertion, the average and worst-case time complexity for deletion is O(1), but in case of collisions, it can be O(n).
Space Complexity: O(N)
The space complexity of the hash table is O(N), where N is the number of elements stored in the hash table, as each element requires memory for the HashEntry object. The space complexity may increase further if the hash table needs to be resized dynamically.
$ g++ hash_table.cpp $ a.out ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 12 Enter key at which element to be inserted: 1 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 24 Enter key at which element to be inserted: 2 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 36 Enter key at which element to be inserted: 3 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 48 Enter key at which element to be inserted: 4 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 60 Enter key at which element to be inserted: 5 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 3 Element at key 3 : 36 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 5 Element at key 5 : 60 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 3 Enter key of the element to be deleted: 4 Element Deleted ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 4 No element found at key 4 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 2 Element at key 2 : 24 ---------------------- Operations on Hash Table ---------------------- 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 4 ------------------ (program exited with code: 1) Press return to continue
To practice programs on every topic in C++, please visit “Programming Examples in C++”, “Data Structures in C++” and “Algorithms in C++”.
- Practice Programming MCQs
- Check Data Structure Books
- Check Computer Science Books
- Apply for Computer Science Internship
- Practice Computer Science MCQs