7

与 CodeReview 上的这个问题相关,我尝试使用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使用单个分配器作为参数进行构造不完整?

更新:进一步检查表明,对于除 之外的几乎所有容器std::vector,libstdc++ 中分配器的使用直接访问 typedef 和分配器的成员函数,而不是通过std::allocator_traits. 这适用std::allocator于所有自定义分配器但失败,除非它们直接添加这些成员和 typedef。

4

1 回答 1

4

在 2013-08-01 生成的最新doxygen 文档中,它位于第 178 行:

explicit
unordered_map(const allocator_type& __a)
: _M_h(__a)
{ }

但是,在4.8.1的文档中它不存在,这与我的本地文档相同。就 g++4.8 而言,它没有实现。

找到补丁的链接。它的日期为 2013-04-22,比 4.8 发布稍晚一些。

于 2013-09-20T10:40:48.300 回答