【发布时间】:2019-10-17 21:20:53
【问题描述】:
std::map 定义复制如下:
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
基于std::map的定义,我们可以为其Key和Value提供定制的分配器。
问题:
- 在大多数情况下,
std::map是由 RB 树实现的。我们如何为 RB 树节点提供定制的分配器?恐怕我们做不到。 - 如果第一个问题的答案是我们可以不为RB树节点提供自定义分配器,我们可以不为其他基于节点的容器提供自定义分配器(例如,
std::list 和std::set)。请确认我的理解是否正确。
【问题讨论】:
-
我不确定我是否正确理解了您的问题,但如果您提供自定义分配器,所有节点都将使用提供的分配器进行分配。
-
感谢您的帮助。我需要知道节点大小来计算内存池大小。他们使用相同的分配器,但它分配的内存大小为 _Rb_tree_node 而不是 std::pair
. -
地图节点的大小取决于 STL 的实现。如果我没记错的话,在我的系统上,它是对的大小加上 3 *
sizeof(std::size_t)来自节点指针。也许以下链接有帮助:stackoverflow.com/questions/22951378/… -
谢谢,使用 _Rb_tree_node 而不是对的大小加上 3 * sizeof(std::size_t) 更安全
标签: c++ c++11 stdmap allocator