带有unique_ptr的C ++嵌套映射

时间:2015-03-07 23:19:44

标签: c++ stl smart-pointers

我目前正在学习c ++并专注于STL。我没有找到这个问题的答案,所以问题在于:如何在数据结构map<int, map<string, vector<unique_ptr>>>中设置元素?以下代码和一些注释说明了这个问题:

#include <map>
#include <string>
#include <memory>
#include <vector>

using namespace std;

// Used in the example
struct Resource {};

int main(int argc, char** argv) {
  // I was able to get the following map running fine
  // int -> { string -> unique_ptr }
  map<int, map<string, unique_ptr<Resource>>> data;

  map<string, unique_ptr<Resource>> toBeInserted;
  toBeInserted["key"] = unique_ptr<Resource>(new Resource);
  // data[1] = toBeInserted; // error
  data[1] = std::move(toBeInserted); // ok


  // But the issue happens when it's a vector of unique_ptrs
  // int -> { string -> { [unique_ptr] } }
  map<int, map<string, vector<unique_ptr<Resource>>>> otherData;

  vector<unique_ptr<Resource>> list;
  list.push_back(unique_ptr<Resource>(new Resource));
  list.push_back(unique_ptr<Resource>(new Resource));

  map<string, vector<unique_ptr<Resource>>> _toBeInserted;
  _toBeInserted["key"] = std::move(list); // ok

  // But I cant insert _toBeInserted back to the original map.
  // The compilation errors are all related to the unique_ptr 
  otherData[1] = std::move(_toBeInserted); // Can't do this 
}

- 编辑:链接到汇编错误:ideone.com/hs3G8m

我的问题是如何初始化元素并将其添加到结构map<int, map<string, vector<unique_ptr<T>>>>。我正在使用带有c ++ 11标志的GCC 4.9。提前致谢!

1 个答案:

答案 0 :(得分:2)

我没有看到代码有任何问题。 我把它编译为

g++ -Wall -std=c++11 test.cpp
没有使用
gcc (GCC) 4.8.1

的任何警告

它看起来像编译器/ STL错误。