c++ - 将对象插入映射或数组或胜利者作为对象的构造函数
问题描述
您好,我是 cpp 的初学者,是否可以在创建到地图或任何类型的容器后自动保存对象?在这个简单的例子中,我可以说问题是对象尚未创建,那么我如何在构造函数中引用未创建的对象。?
class A {
public:
A(parameter){
map.emplace(key,object);//what should I write in the second field ?
}
};
解决方案
正如评论中所建议的,您可以使用静态方法:
#include <map>
#include <iostream>
struct A {
int x;
A(int x) : x(x) {}
static auto create_in_map(int key,int x, std::map<int,A>& m) {
return m.emplace(key,x).first;
}
};
int main() {
std::map<int,A> map;
auto it = A::create_in_map(1,2,map);
std::cout << "key: " << it->first << " value: " << it->second.x;
}
请注意,标准容器拥有它们的元素,即您不想先创建一个A
然后将其放置在地图中,因为您最终会得到两个实例:您创建的一个和地图内的副本。emplace
获取A
构造函数的键和参数,并直接在映射中创建实例。它返回 a std::pair<iterator,bool>
,迭代器指向插入的元素,并bool
指示该元素是否实际已插入(当键已经存在时不是)。在代码中我忽略了bool
并且只返回了迭代器。迭代器->first
是键,它->second
是A
在方法中创建的。
最后但同样重要的是,上面的代码仅用于说明。不需要那种静态方法。你应该简单地写map.emplace(1,2)
在main
.
推荐阅读
- java - 休眠:在保存无效的 ltree 列时捕获异常
- powershell - 计划任务中的 Send-MailMessage 编码错误
- google-maps - 我试图渲染一千多个标记但它崩溃了..有人可以帮助我吗?
- javascript - 更改 javascript 显示/隐藏文本功能
- c# - 如何使用 c# 从 selenium 中的给定 IwebElement 获取相对 xpath?
- c# - 在 c# 中添加证书 ocsp 权限信息访问和策略扩展
- excel - 一个单元格等于 IF 语句中存在的多个数字,excel
- string - 禁用特定列的自动增量
- c# - 将结构映射注册表添加到 Microsoft.Azure.Functions.Extensions.DependencyInjection
- google-apps-script - 每 5 秒一次打开一长串 URL 的脚本,然后打开下一个 URL