Хеш-таблицы [Иван Кисляков Программист] (fb2) читать постранично, страница - 4


 [Настройки текста]  [Cбросить фильтры]

(arr[h1]->value == value && arr[h1]->state)

                return false;

            if (!arr[h1]->state && first_deleted == -1)

                first_deleted = h1;

            h1 = (h1 + h2) % buffer_size;

            ++i;

        }

        if (first_deleted == -1)

        {

            arr[h1] = new Node(value);

            ++size_all_non_nullptr;

        }

        else

        {

            arr[first_deleted]->value = value;

            arr[first_deleted]->state = true;

        }

        ++size;

        return true;

    }


    bool Remove(const T& value, const THash1& hash1 = THash1(), const THash2& hash2 = THash2())

    {

        int h1 = hash1(value, buffer_size);

        int h2 = hash2(value, buffer_size);

        int i = 0;

        while (arr[h1] != nullptr && i < buffer_size)

        {

            if (arr[h1]->value == value && arr[h1]->state)

            {

                arr[h1]->state = false;

                --size;

                return true;

            }

            h1 = (h1 + h2) % buffer_size;

            ++i;

        }

        return false;

    }


    bool Find(const T& value, const THash1& hash1 = THash1(), const THash2& hash2 = THash2())

    {

        int h1 = hash1(value, buffer_size);

        int h2 = hash2(value, buffer_size);

        int i = 0;

        while (arr[h1] != nullptr && i < buffer_size)

        {

            if (arr[h1]->value == value && arr[h1]->state)

                return true;

            h1 = (h1 + h2) % buffer_size;

            ++i;

        }

        return false;

    }

};