容器元素是否可以使用“std::p mr::map”的分配器进行分配?

Can the allocator of `std::pmr::map` be used by container elements for their allocations?

提问人:Abhijit 提问时间:7/28/2023 最后编辑:chrysanteAbhijit 更新时间:7/28/2023 访问量:68

问:

假设我们有一个如下内容:std::map

std::pmr::map<std::string, std::unint8_t> test;

如何通过多态分配器而不是由内存分配?std::stringstd::mapstd::allocator

我知道如果我们使用 ,容器元素将使用容器的分配器。但我想让它作为密钥类型使用。std::pmr::stringstd::string

我阅读了有关 std::scoped_allocator_adaptor 的信息,但不确定如何使用它。

任何例子将不胜感激。

C++ STL 标准映射

评论


答:

2赞 chrysante 7/28/2023 #1

它不能作为密钥类型完成。 即std::stringstd::string

std::basic_string<char, std::char_traits<char>, std::allocator<char>>

用于分配其内存。此分配器始终调用分配。您需要将容器元素的静态类型从其他类型更改为其他类型才能使用另一个分配器。std::allocator<char>operator newstd::string

正如您提到的,解决方案是使用 ,它用于分配其内存。此分配器可以通过容器传播,因此元素使用与容器本身相同的分配器实例。std::pmr::stringstd::pmr::polymorphic_allocator<char>

std::scoped_allocator_adaptor在这里帮不了你。