Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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++ 映射和自定义分配器的映射_C++_Stl - Fatal编程技术网

C++ 映射和自定义分配器的映射

C++ 映射和自定义分配器的映射,c++,stl,C++,Stl,有没有办法将自定义分配器与映射映射一起使用 比如说我有: typedef std::map<int,int> Inner; typedef std::map<int, Inner> Outer; typedef标准::映射内部; typedef std::映射外部; 我可以为这两个配置自定义分配器吗 既然我不能在内部映射的构造函数中定义内部映射的分配器,我该怎么做呢 也就是说,对于外部,我会: Allocator myAllocator; Outer outer(st

有没有办法将自定义分配器与映射映射一起使用

比如说我有:

typedef std::map<int,int> Inner;
typedef std::map<int, Inner> Outer;
typedef标准::映射内部;
typedef std::映射外部;
我可以为这两个配置自定义分配器吗

既然我不能在内部映射的构造函数中定义内部映射的分配器,我该怎么做呢

也就是说,对于外部,我会:

Allocator myAllocator;
Outer outer(std::less<int>(), myAllocatorObject);
分配器myAllocator;
外部(std::less(),myAllocatorObject);
对于内部???

它看起来像这样:

typedef std::map<int, int, std::less<int>, SimpleAllocator<std::pair<const int, int>>> Inner;
typedef std::map<int, Inner, std::less<int>, SimpleAllocator<std::pair<const int, Inner>>> Outer;
Inner inner;
Outer outer;
typedef标准::映射内部;
typedef std::映射外部;
内在的;
外部的;
我在这里尝试了一些示例代码,效果很好:


Jonathan Wakely非常好的翻拍版本:


您不能为外部
映射编写分配器,其中
构造
将分配器指定给内部
映射
s吗?(我没有亲自尝试过,但这似乎是一个很有希望的前景)。我不确定我是否了解如何做到这一点。示例?此演示与您描述的非常相似(因此即使您实际上不想使用boost,它也会演示原理):分配器是类型的一部分,因此您需要更改typedef,不只是将不同的参数传递给构造函数。外部映射定义不会导致构造任何内部映射对象,因此不需要内部分配器。在构造内部映射对象时,可以指定内部映射分配器。别名模板使声明更加简单:(另外,您的分配器构造函数不应该是显式的,不需要在类主体中定义的成员上放置
内联的
,并且您为该程序包含了太多的头文件。也可以使分配器简单得多,但ideone.com仍停留在GCC 4.8上,因此无法工作)啊,你说得对,我从我的示例代码项目中复制粘贴了一些代码,所以看起来很混乱。谢谢你的帮助!谢谢你的帮助。但是如果我想自己初始化SimpleLocator怎么办?我想你可以把分配器对象传递到
映射
的构造函数中,比如
显式映射(const allocator_type&alloc);
你可以在这里检查: