【问题标题】:Inserting unique pointers in deep std::unordered_map在深 std::unordered_map 中插入唯一指针
【发布时间】:2021-11-01 10:29:59
【问题描述】:

如何在我拥有的这个深层无序映射中插入唯一指针?

std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unique_ptr<MyStruct>>>>

(C++14)

【问题讨论】:

  • 你试过什么?如何将unique_ptr 插入法线贴图?完全一样,但是通过多个容器接口。

标签: c++ c++14 unique-ptr unordered-map


【解决方案1】:

给定一张地图

std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unique_ptr<MyStruct>>>> m;

还有unique_ptr

auto s = std::make_unique<MyStruct>();

您可以像这样将它插入到地图中:

m[1][2][3] = std::move(s);

【讨论】:

    【解决方案2】:

    这是我想出的方法:

    std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unique_ptr<MyStruct>>>> myMap;
    auto ptr = std::make_unique<MyStruct>();
    
    // Insert at 17, 18, 19:
    std::unordered_map<uint64_t, std::unique_ptr<MyStruct>> tmpLevel3Map;
    tmpLevel3Map.emplace(19, std::move(ptr));
    std::unordered_map<uint64_t, std::unordered_map<uint64_t, std::unique_ptr<MyStruct>>> tmpLevel2Map;
    tmpLevel2Map.emplace(18, std::move(tmpLevel3Map));
    myMap.emplace(17, std::move(tmpLevel2Map));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多