与CodeReview上的this question相关,我尝试将std::unordered_map
与自定义分配器一起使用,但显然这不适用于gcc / clang和libstdc ++。通过使用std::allocator
#include <unordered_map>
int main()
{
typedef std::allocator<std::pair<const int, int>> A;
typedef std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, A> H;
auto h = H{A()}; // ERROR, cannot find constructor H::H(const A&)
}
问题:libstdc ++是否支持使用单个分配器构造std::unordered_map
作为参数不完整?
UPDATE :进一步检查显示,对于除std::vector
以外的几乎所有容器,libstdc ++中的分配器使用直接访问typedef和分配器的成员函数,而不是通过{{1} }。这适用于std::allocator_traits
但是对于所有自定义分配器都失败,除非他们直接添加这些成员和typedef。
答案 0 :(得分:4)
在2013-08-01生成的最新doxygen docs中,它位于第178行:
explicit
unordered_map(const allocator_type& __a)
: _M_h(__a)
{ }
然而,在4.8.1的文档中,它不在那里,与我的本地文档相同。就g ++ 4.8而言,它没有实现。
Found the link to the patch。它的日期是2013年4月22日,这是4.8发布后的一点点。