Создавая свой собственный распределитель в C ++ 11, я реализую следующие интерфейсы. Это работает с вектором, но при попытке использовать это с картой я получаю ошибки по отсутствующим элементам. Я думал, что это все, что мне нужно реализовать для C ++ 11, поскольку он будет использовать allocator_traits в реализациях stl. Что мне здесь не хватает? Нужно ли мне определять больше методов / структур данных для распределителя для std :: map? При попытке компиляции я вижу следующие ошибки (см. Ниже). Строка 3 main.cpp - это просто
#include <map>
template <class T> struct MyAllocator {
typedef T value_type;
MyAllocator() noexcept; // only required if used
MyAllocator(const MyAllocator&) noexcept; // copies must be equal
MyAllocator(MyAllocator&&) noexcept; // not needed if copy ctor is good enough
template <class U> MyAllocator(const MyAllocator<U>& u) noexcept;
// requires: *this == MyAllocator(u)
value_type* allocate(std::size_t);
void deallocate(value_type*, std::size_t) noexcept;
};
template <class T, class U> bool
operator==(const MyAllocator<T>&, const MyAllocator<U>&) noexcept;
Ошибки:
Первые ошибки решаются с помощью некоторых определений типов в MyAllocator: