将对象插入地图或数组或胜利者中,作为对象的构造函数。

问题描述 投票:0回答:1

你好,我是cpp的初学者,请问有什么办法可以在创建一个对象后自动保存到地图或任何一种容器中吗? 在这个简单的例子中,我可以说问题是对象还没有创建,所以我如何在构造函数中引用一个未创建的对象?

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

c++ constructor containers
1个回答
1
投票

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

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

最后但并非最不重要的,上面的代码只是为了说明问题。没有必要使用那个静态方法。你应该简单地写 map.emplace(1,2)main.

© www.soinside.com 2019 - 2024. All rights reserved.