你好,我是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
的构造函数,并直接在地图中创建实例。它返回一个 std::pair<iterator,bool>
迭代器指向插入的元素和 bool
表示该元素是否真的被插入了(当键已经存在时,就没有了)。在代码中,我忽略了 bool
并只返回迭代器。迭代器 ->first
是关键,其 ->second
是 A
的方法中创建的。
最后但并非最不重要的,上面的代码只是为了说明问题。没有必要使用那个静态方法。你应该简单地写 map.emplace(1,2)
在 main
.