Предварительное выделение сегментов в C ++ std :: unordered_map

Я использую std :: unordered_map из gnu ++ 0x для хранения огромного количества данных. Я хочу заранее выделить место для большого количества элементов, так как могу ограничить общее используемое пространство.

Я бы хотел иметь возможность позвонить:

std::unordered_map m;
m.resize(pow(2,x));

где x известен.

std :: unordered_map не поддерживает это. Я бы предпочел использовать std :: unordered_map , если это возможно, поскольку в конечном итоге он станет частью стандарта.

Некоторые другие ограничения:

Необходим надежный доступ O (1) и изменение карты. Желаемые функции хеширования и сравнения уже нестандартны и довольно дороги. Мутация O (log n) (как и std :: map ) слишком дорога.

-> Дорогой хэш и сравнение также делают рост на основе амортизации слишком дорогим. Каждая дополнительная вставка требует O (n) операций от этих функций, что приводит к дополнительному квадратичному члену во времени выполнения алгоритма, поскольку экспоненциальные требования к памяти требуют роста O (n).

24
задан 眠りネロク 21 August 2018 в 06:12
поделиться