Я хочу объединить 2 или более хеш-таблиц вместе. Не имеет значения, какой будет конечная форма, если я могу ее перебирать. Здесь окончательная форма представляет собой массив.
Таким образом, у меня есть длинная беззнаковая длина ключа, значение представляет собой строку int. Каждый ключ сопоставляется с ячейкой, каждая ячейка может иметь коллизии. Вместо того, чтобы копировать всю хеш-таблицу в массив, я копирую ее по бин-бинам, поэтому мне не нужно будет перебирать весь массив. Сначала я копирую первый бин первого хеш-таблицы в массив Pairs, со строкой и int в качестве полей (ключ игнорируется) '
Что-то вроде
Class Pair{
char* s;
int frequency;
};
Чтобы добавить его в массив, мне нужно что-то вроде этого ...
Pair pair
pair.s=string of the hashtable value
pair.s=integer of the hashtable value
array[index]=pair;
Затем, чтобы объединить 1-й блок 2-й хеш-таблицы в массив, я сначала проверяю, находится ли строка значения хеш-таблицы в массиве, если это так, я просто обновляю часть int пары классов, соответствующую строка, которая находится в массиве, если это не так, я добавляю ее в массив.
Затем я перехожу к следующему бину .. скопируем 2-й блок первого хеш-таблицы в массив ... затем вместо того, чтобы перебирать весь массив, чтобы проверить, что во 2-м бине 2-го хеш-таблицы находится в массиве Я начинаю поиск по индексу массива, где первый элемент второго бина был вставлен в массив.
Проблема даже в том, чтобы повторить этот путь, все еще довольно продолжительный, поскольку каждый бин может содержать более 1000 коллизий, и есть тысячи бинов, через которые нужно пройти. Я хочу избежать этого. Я думал, так как каждый ключ (который является длинным длинным) уникален для каждой строки, чтобы установить смещение для этого номера ключа равным 1, если он находится в массиве, и 0, если это не так. Таким образом, мне нужно только перебрать массив, если он находится в массиве. Проблема с этим длинным длинным просто слишком велика. Я не могу выделить массив с таким количеством битов ...
Есть ли другой способ?