libstdc ++对std :: unordered_map的支持是否不完整?

时间:2013-09-20 09:34:34

标签: c++ c++11 unordered-map allocator libstdc++

与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&)
}

Live Example

问题:libstdc ++是否支持使用单个分配器构造std::unordered_map作为参数不完整?

UPDATE :进一步检查显示,对于除std::vector以外的几乎所有容器,libstdc ++中的分配器使用直接访问typedef和分配器的成员函数,而不是通过{{1} }。这适用于std::allocator_traits但是对于所有自定义分配器都失败,除非他们直接添加这些成员和typedef。

1 个答案:

答案 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发布后的一点点。