из 1 мил элементов. «Вы можете зарезервировать самый большой контейнер, который может когда-либо существовать» - это еще один момент, который я не считаю разумным советом в контексте этого вопроса.
ользуюstd::unordered_map
из gnu ++ 0x хранить огромное количество данных. Я хочу заранее выделить место для большого количества элементов, поскольку я могу ограничить общее использованное пространство.
То, что я хотел бы сделать, это позвонить:
std::unordered_map m;
m.resize(pow(2,x));
где х известен.
std::unordered_map
не поддерживает это Я бы предпочел использоватьstd::unordered_map
если возможно, так как это в конечном итоге будет частью стандарта.
Некоторые другие ограничения:
Нужен надежный O (1) доступ и мутация карты. Требуемые хеш-функции и функции сравнения уже нестандартны и несколько дороги. O (log n) мутация (как сstd::map
) это слишком дорого.
-> Дорогой хэш и сравнение также делают слишком дорогой рост на основе амортизации. Каждая дополнительная вставка требует O (n) операций из этих функций, что приводит к дополнительному квадратичному члену во время выполнения алгоритма, поскольку экспоненциальные требования к памяти требуют O (n) роста.