C+;中自定义类的哈希映射中的默认值+; 我想在C++中使用HashMap,其中存储的对象是自定义类的实例。这个自定义类只有一个构造函数和一个我需要设置的参数

C+;中自定义类的哈希映射中的默认值+; 我想在C++中使用HashMap,其中存储的对象是自定义类的实例。这个自定义类只有一个构造函数和一个我需要设置的参数,c++,dictionary,hash,constructor,C++,Dictionary,Hash,Constructor,HashMap允许通过其构造函数设置其内部对象的默认值:HashMap(const-mapped\u-type&v) 问题是我不知道如何使用它 假设我的自定义类名为Foo,需要为其构造函数提供一个int 如果我想用值3实例化HashMap中的所有对象,我应该这样做吗 HashMap<String, Foo> myMap(Foo(3)); HashMap-myMap(Foo(3)); 它是否需要在Foo中实现复制构造函数 编辑:我必须使用特定的HashMap和给定的构造函数来处理默

HashMap允许通过其构造函数设置其内部对象的默认值:
HashMap(const-mapped\u-type&v)

问题是我不知道如何使用它

假设我的自定义类名为
Foo
,需要为其构造函数提供一个int

如果我想用值3实例化
HashMap
中的所有对象,我应该这样做吗

HashMap<String, Foo> myMap(Foo(3));
HashMap-myMap(Foo(3));
它是否需要在
Foo
中实现复制构造函数


编辑:我必须使用特定的HashMap和给定的构造函数来处理默认值。

为foo定义默认构造函数:

class foo
{
public:
    foo() {value = 3;};
    int value;
};
使用std,std::string作为键,foo作为值:

std::unordered_map<std::string, foo> hashMap = std::unordered_map<std::string, foo>();

std::cout << hashMap["newValue"].value;
std::无序_映射hashMap=std::无序_映射();

std::cout为foo定义默认构造函数:

class foo
{
public:
    foo() {value = 3;};
    int value;
};
使用std,std::string作为键,foo作为值:

std::unordered_map<std::string, foo> hashMap = std::unordered_map<std::string, foo>();

std::cout << hashMap["newValue"].value;
std::无序_映射hashMap=std::无序_映射();
std::cout

HashMap-myMap(Foo(3));
如果要工作,您将创建一个Foo类的temp对象,并将其绑定到const Foo&HashMap在构造函数中接受该const Foo 这是允许的

现在,如果在插入默认值时,HashMap是从某个保存的默认Foo成员复制的,那么是的,Foo将需要一个复制构造函数。 请记住,编译器会为您生成一个副本构造函数,只有在需要特别注意时(例如,如果某些成员是动态分配的),您才应该编写自己的副本构造函数

HashMap<String, Foo> myMap(Foo(3));
HashMap-myMap(Foo(3));
如果要工作,您将创建一个Foo类的temp对象,并将其绑定到const Foo&HashMap在构造函数中接受该const Foo 这是允许的

现在,如果在插入默认值时,HashMap是从某个保存的默认Foo成员复制的,那么是的,Foo将需要一个复制构造函数。
请记住,编译器会为您生成一个复制构造函数,只有在您需要特别注意时(例如,如果某些成员是动态分配的),您才应该编写自己的构造函数。

请显示您到目前为止拥有的代码(或a)请显示您到目前为止拥有的代码(或a)事实上,给Foo 3只是一个示例,我必须给它一个可能更改的指针(但必须由HashMap中的所有对象共享)。此外,我必须使用特定的HashMap来存储数据。好的,那么您必须分享更多关于HashMap的信息。它可能已经做了您想要的事情,这意味着当您尝试访问HashMap中不存在的键下的对象时,它会插入默认值的副本,然后返回它。是的,它确实做到了。我的问题更多的是关于为默认值传递“Foo(3)”,以及它是否需要Foo中的复制构造函数。因此,问题是关于C++的,而不是这个HasMead。在C++中默认复制构造函数是创建的,所以不需要新的。给FO 3只是一个例子,事实上,我必须给它一个指针,它可能会改变(但是必须被HASMAP中的所有对象共享)。此外,我必须使用特定的HashMap来存储数据。好的,那么您必须分享更多关于HashMap的信息。它可能已经做了您想要的事情,这意味着当您尝试访问HashMap中不存在的键下的对象时,它会插入默认值的副本,然后返回它。是的,它确实做到了。我的问题更多的是关于为默认值传递“Foo(3)”,以及它是否需要Foo中的复制构造函数。所以问题是关于C++的,而不是这个HasMead。C++中默认创建复制构造函数,所以不需要新的构造函数。