Я создаю программу, которая сжимает файлы со сжатием Хаффмана.Первоначально я использовал вектор uint8_t для хранения байтов из файла, но производительность была ужасной (2 часа, чтобы распаковать файл размером 74 МБ).Я решил использовать 16-битные чанки для представления значений из файла.
Первоначально у меня было это (входной битовый набор содержит 520 миллионов битов)
std::vector<uint8_t> bytes;
boost::dynamic_bitset<unsigned char> input;
boost::to_block_range(input, std::back_inserter(bytes));
Это прекрасно работало,и он заполнил вектор, полный 8-битных целых чисел, представляющих каждый байт файла.Частоты каждого бита записаны в векторе целых чисел размером 256. Это работает ужасно.Декодирование строки занимает абсолютно вечно, так как частоты этих целых чисел в моем файле ОГРОМНЫ.Я подумал, что было бы лучше, если бы я использовал 16-битные целые числа и сохранял частоты в векторе размером 65536. Вот моя попытка заполнить мой вектор «байтов»:
std::vector<uint16_t> bytes;
boost::dynamic_bitset<unsigned char> input;
boost::to_block_range(input, std::back_inserter(bytes));
Проблема здесь заключается в том, чтофункция to_block_range () берет 8 бит из моего набора битов и дополняет их 8 нулями, а не выдает 16 байтов за раз.
Есть ли способ заполнить вектор uint16_t из динамического набора битовтаким образом?