Как реализовать открытое хэширование?

До этого имел дело с закрытым хешированием, все понял, имеется функция, которая, если ячейка занята вычисляет новый адрес с помощью опробования. Сейчас же хочу попробовать сделать открытое хеширование. Нигде не могу найти именно код на языке 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);
}
→ Ссылка