首页 > 解决方案 > 使用初始化列表构造函数构造具有不可复制值类型的 std::map

问题描述

有没有办法使用初始化列表构造函数构造具有不可复制值类型的 std::map ?

请参阅以下示例

#include <memory>
#include <map>

int main()
{
  std::map<int, int*> int_ptr{{1, nullptr}}; // compiles
  // std::map<int, std::unique_ptr<int>> unique_ptr_int{{1, std::unique_ptr<int>()}}; // Doesn't compile
}

注意:我特别询问是否可以使用初始化器列表构造函数来完成。我知道我可以使用不同的构造函数构造地图并添加元素,但我想知道是否可以使用此构造函数以及如何使用它,也许使用 std::piecewise_construct 或类似的东西。

标签: c++

解决方案


我想最简单的方法是将智能指针放在地图中,这样对象就不会被复制。

std::map<int,std::shared_ptr<myobj>> myobj_Map;

推荐阅读