Как реализовать открытое хэширование?
До этого имел дело с закрытым хешированием, все понял, имеется функция, которая, если ячейка занята вычисляет новый адрес с помощью опробования. Сейчас же хочу попробовать сделать открытое хеширование. Нигде не могу найти именно код на языке C++ с реализацией открытого хеширования, что из себя представляет сам код. На словах понимаю, что у каждой ячейки есть свой массив элементов, куда вставляются элементы при коллизии, но не знаю как реализовать на C++.
Ответы (1 шт):
Автор решения: Vasian
→ Ссылка
Как-то так (но здесь используется список для хранения коллизий, а не массив):
template <typename T, typename K>
class CCHash
{
private:
int hash(int key); // функция хэширования
List <T, K>* list; // список для хранения коллизий
public:
T& at(K key) override; // доступ по ключу
void add(K key, T value) override; // добавление
void remove(K key) override; // удаление
}
template<typename T, typename K>
T& CCHash<T, K>::at(K key)
{
return list[this->hash(key)].at(key);
}
template<typename T, typename K>
void CCHash<T, K>::add(K key, T value)
{
list[this->hash(key)].add(key, value);
}
template<typename T, typename K>
void CCHash<T, K>::remove(K key)
{
list[this->hash(key)].remove(key);
}