Tem*_*Rex 7 c++ unordered-map libstdc++ allocator c++11
与CodeReview 上的这个问题相关,我尝试使用std::unordered_map
自定义分配器,但显然这不适用于gcc/clang和libstdc ++.可以通过使用a初始化空哈希映射来生成错误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&)
}
Run Code Online (Sandbox Code Playgroud)
实例.
问题:libstdc ++是否支持std::unordered_map
使用单个分配器构造作为参数不完整?
更新:进一步检查表明,对于除了以外的几乎所有容器std::vector
,libstdc ++中的分配器的使用直接访问typedef和分配器的成员函数,而不是通过std::allocator_traits
.这适用于std::allocator
所有自定义分配器但是失败,除非它们直接添加这些成员和typedef.
在 2013 年 8 月 1 日生成的最新doxygen 文档中,它位于第 178 行:
explicit
unordered_map(const allocator_type& __a)
: _M_h(__a)
{ }
Run Code Online (Sandbox Code Playgroud)
然而,在4.8.1的文档中它不存在,这与我本地的文档相同。就 g++4.8 而言,它尚未实现。
找到了补丁的链接。它的日期是 2013 年 4 月 22 日,距离 4.8 发布不久。