首页 > 解决方案 > 将对象插入映射或数组或胜利者作为对象的构造函数

问题描述

您好,我是 cpp 的初学者,是否可以在创建到地图或任何类型的容器后自动保存对象?在这个简单的例子中,我可以说问题是对象尚未创建,那么我如何在构造函数中引用未创建的对象。?

class A {
public: 
    A(parameter){
        map.emplace(key,object);//what should I write in the second field ?
    }
};

标签: c++constructorcontainers

解决方案


正如评论中所建议的,您可以使用静态方法:

#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是键,它->secondA在方法中创建的。

最后但同样重要的是,上面的代码仅用于说明。不需要那种静态方法。你应该简单地写map.emplace(1,2)main.


推荐阅读