Каков синтаксис использования boost::pool_allocator с boost::unordered_map?
-
21-08-2019 - |
Вопрос
Я просто экспериментирую с boost::pool, чтобы увидеть, является ли он более быстрым распределителем для вещей, с которыми я работаю, но я не могу понять, как использовать его с boost::unordered_map:
Вот фрагмент кода:
unordered_map<int,int,boost::hash<int>, fast_pool_allocator<int>> theMap;
theMap[1] = 2;
Вот ошибка компиляции, которую я получаю:
Ошибка 3, ошибка C2064:термин не оценивается как функция, принимающая 2 аргумента C:\Program Files (x86)\boost\boost_1_38\boost\unordered\detail\hash_table_impl.hpp 2048
Если я прокомментирую использование карты, например.«theMap[1] = 2», тогда ошибка компиляции исчезнет.
Решение
Похоже, вам не хватает параметр шаблона.
template<typename Key, typename Mapped, typename Hash = boost::hash<Key>,
typename Pred = std::equal_to<Key>,
typename Alloc = std::allocator<std::pair<Key const, Mapped> > >
Четвертый параметр — предикат для сравнения, пятый — распределитель.
unordered_map<int, int, boost::hash<int>,
std::equal_to<int>, fast_pool_allocator<int> > theMap;
Кроме того, но, вероятно, это не является причиной вашей проблемы, вам необходимо разделить два символа «>» в конце создания экземпляра шаблона.