Реализация циклического цикла в пользовательском хешированном наборе: доступ только к записям, не помеченным как пустые

Базовая настройка контейнера

Я реализовал простой пользовательский неупорядоченный набор контейнеров, который использует хеширование. Внутри он хранит данные примерно так:

class Set
{
    T *data = nullptr;
    bool *emptyList = nullptr;
    int size = 0;

    ... (inner methos go here)
};

То есть он хранит два массива. Один называется data с фактическими значениями шаблонного типа Tи еще один называется emptyList с bool значения, которые отмечают, считается ли в этой позиции набор пустым или нет.

Таким образом, линейное исследование для сохранения новых значений, а также удаление записей становятся намного дешевле. Оба становятся, соответственно, просто вопросом поиска следующего emptyList[index] = trueили установить его в true,

Проблема с дальним циклом

В настоящее время я разрешаю итерацию по значениям, хранящимся в наборе, как for(auto i : set_instance) имея следующие открытые функции-члены в заданном классе:

T* begin() const { data[0] };
T* end() const { data[end] };

Проблема с этим, конечно же, заключается в том, что дальний цикл for также обращается к записям в data к ним нельзя обращаться, так как они отмечены в emptyList как пустой

Есть ли способ для меня, чтобы когда пользователь пытается перебрать множество с помощью циклических циклов, только записи в data которые соответствуют записям в emptyList которые не помечены как true действительно доступны / обрабатываются в цикле?

0 ответов

Другие вопросы по тегам