Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是libstdc++;支持std::无序的_映射不完整?_C++_C++11_Unordered Map_Allocator_Libstdc++ - Fatal编程技术网

C++ 是libstdc++;支持std::无序的_映射不完整?

C++ 是libstdc++;支持std::无序的_映射不完整?,c++,c++11,unordered-map,allocator,libstdc++,C++,C++11,Unordered Map,Allocator,Libstdc++,关于OnCodeReview,我尝试将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

关于OnCodeReview,我尝试将
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&)
}
#包括
int main()
{
类型定义std::分配器A;
typedef std::无序的_映射H;
auto h=h{A()};//错误,找不到构造函数h::h(常量A&)
}

问题:libstdc++对使用单个分配器作为参数构造
std::无序_映射
的支持是否不完整

更新:进一步检查表明,对于除
std::vector
以外的几乎所有容器,在libstdc++中使用分配器直接访问分配器的typedef和成员函数,而不是通过
std::allocator\u特性
。这适用于
std::allocator
,但对所有自定义分配器无效,除非它们详细地直接添加这些成员和typedef。

在2013-08-01生成的最新版本中,它位于第178行:

explicit
unordered_map(const allocator_type& __a)
: _M_h(__a)
{ }
但是,在文档中,它不在那里,这与我的本地文档相同。就g++4.8而言,它还没有实现


。它的日期是2013年4月22日,这是在4.8发布后不久。

我认为这是c++0x的问题,因为有很多在线文档没有提供特定的构造函数。不过,你需要一位语言律师来了解具体情况。在GCC主干上,无序容器支持C++11分配器。我希望在GCC4中及时完成剩余容器的转换,以使用
allocator\u traits
。9@JonathanWakely这些更新将不胜感激!这有什么微妙之处吗?用
std::allocator\u traits::bla
替换像
\utp\u allocator::bla
这样的事件似乎很简单,但也许我低估了事情?哈哈哈!但愿如此;-)只需通过
分配器\u traits
进行间接定向是很容易的,但是支持分配器传播和添加所有附加构造函数需要更多的工作,更不用说验证有状态分配器、作用域分配器和自定义指针类型是否有效,以及正确获取异常规范,当然还有编写测试。请参阅@JonathanWakely dam中的幻灯片26,我应该知道作为STL维护人员需要的不仅仅是掌握s//g;-)@TemplateRex:np,太糟糕了,他们的库没有他们的编译器那么先进。