首页 > 解决方案 > 将带有模板的自定义类插入 std::map

问题描述

我已经编写了自己的课程,并且想将其插入地图中。请参见下面的示例:

#include <iostream>
#include <string>
#include <map>
#include <memory>
#include <mutex>

template <class T>
class A {
public:
    T a;
    A() = default;
    ~A() = default;
    A(T i) { a = i; }
};

int main()
{
  std::pair<int,A<int>> p;
  p = std::make_pair<int,A<int>>(9,A<int>(1));

  std::map<int, A<int>> m;
  m.emplace(1,A<int>(1));
}

当我尝试编译它时,我得到了一个巨大的错误。请帮忙解释一下。:)

在此处查看错误:http: //cpp.sh/9nc35

编辑: 我有错字,谢谢!不过,我首先遇到的另一个问题现在出现了。似乎是因为互斥锁?为什么?

标签: c++classtemplatesstdmap

解决方案


您的地图定义为:

std::map<int, std::unique_ptr<A<int>>>

但是在下一行中,您尝试将std::pair<int, A<int>>tom.emplace()作为键传递。

我想你只是想做:

m.emplace(9, std::make_unique<A<int>>(1));
//        ^
//        Not `p`

推荐阅读