Я использую 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).