c++ - 将带有模板的自定义类插入 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
编辑: 我有错字,谢谢!不过,我首先遇到的另一个问题现在出现了。似乎是因为互斥锁?为什么?
解决方案
您的地图定义为:
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`
推荐阅读
- c# - ValueTuple.Create 中的命名参数 (2)
- java - 从查询字符串中删除一个参数而不使用正则表达式
- javascript - 反应递归的多级下拉菜单
- sockets - 连接Socket、Dart、Flutter的奇怪时间
- yaml - 如何在 YAML 文件中生成“for 循环”
- java - Spring JPA 规范 Where 条件括号
- c# - 在邮件中发送 excel 附件时如何修复文件格式和扩展名不匹配警报
- sql-server - SQL Server 中的 18 位时间戳
- r - 在 x 轴上使用带有 double 类型变量的 geom_boxplot
- vue.js - v-for循环中的Vuejs键与简单数组