This project, which was implemented by me in context of a data structure course, realises an extendible hash table for a set of keys using C++. The data structure supports dynamic resizing to efficiently handle growing and shrinking datasets. It provides functionalities for insertion, deletion, searching, and iteration over the elements.
- Extendible Hashing: Dynamic hashing technique that expands and contracts the hash table as necessary.
- Buckets and Directory: The hash table consists of buckets that hold elements and a directory that points to these buckets.
- Collision Handling: Efficiently handles collisions through bucket splitting and directory expansion.
- Iterator Support: Includes an iterator to traverse the elements in the hash table.
- Lazy Deletion: Marks elements as
free_againinstead of immediately removing them, improving deletion efficiency.
Template class for the hash table.
ADS_set(): Constructor to initialize the hash table.ADS_set(std::initializer_list<key_type> ilist): Constructor with initializer list.ADS_set(const ADS_set &other): Copy constructor.~ADS_set(): Destructor to clean up allocated resources.ADS_set &operator=(const ADS_set &other): Assignment operator.ADS_set &operator=(std::initializer_list<key_type> ilist): Assignment operator with initializer list.size_type size() const: Returns the number of elements in the set.bool empty() const: Checks if the set is empty.void insert(std::initializer_list<key_type> ilist): Inserts elements from an initializer list.std::pair<iterator, bool> insert(const key_type &key): Inserts a single element.template<typename InputIt> void insert(InputIt first, InputIt last): Inserts elements from a range.void clear(): Clears the set.size_type erase(const key_type &key): Erases an element by key.size_type count(const key_type &key) const: Counts the occurrences of a key (0 or 1).iterator find(const key_type &key) const: Finds an element by key.void swap(ADS_set &other): Swaps the contents with another set.const_iterator begin() const: Returns an iterator to the beginning.const_iterator end() const: Returns an iterator to the end.void dump(std::ostream &o = std::cerr) const: Dumps the internal state for debugging.
Iterator class to traverse the hash table.
reference operator*() const: Dereference operator.pointer operator->() const: Arrow operator.Iterator &operator++(): Pre-increment operator.Iterator operator++(int): Post-increment operator.friend bool operator==(const Iterator &lhs, const Iterator &rhs): Equality operator.friend bool operator!=(const Iterator &lhs, const Iterator &rhs): Inequality operator.
}