为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)
Set a default constructor for an element in an unordered_map in case of [] operator
我有这个类:
class test_t {
public:
int value;
test_t() { }
test_t(int _value) : value(_value) { }
};
现在我创建了一个以 int 值作为键的unordered_map
std::unordered_map<int, test_t> map;
当我使用运算符 [] 时,如果键不存在,则会将一个新元素添加到调用构造的映射中。
test_t & test = map[0];
现在可以告诉unordered_map调用另一个构造函数了吗? 即是否有可能做这样的事情?
std::unordered_map<int, test_t(5)> map;
意味着每个新元素都将创建值为 5 的结构?
我知道我可以创建这样的结构:
test_t(int _value = 5) { }
然而,课堂测试只是更复杂的一个例子。
如果找不到映射值并且您无法更改它,则[] operator
值初始化映射值。不过,您可以更改默认初始值设定项。
test_t() { value = 5;}
如果要插入所选值以防键不在映射中,一种方法是使用find
将迭代器获取到键值对,如果迭代器end
迭代器,则插入键值对。
@PaulMcKenzie建议的那样,您可以选择只使用 insert,因为"它返回一对,该对由插入元素(或阻止插入的元素(的迭代器和表示插入是否发生的布尔值组成。
m.insert({key, test_t(5)});
相关文章:
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- VSCode 说 std::chrono 是模棱两可的,如果运算符<<重载
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 如果我也使用复制构造函数并且重载 = 运算符,我是否需要析构函数?
- 如果可能的话,C++总是更喜欢右值引用转换运算符而不是常量左值引用吗?
- 未找到匹配的运算符删除;如果初始化引发异常,内存将不会被释放
- 为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 如果我为一个类编写new和delete运算符,我是否必须编写它们的所有重载
- 在不放置新运算符的情况下,在预分配的内存上使用虚函数初始化对象 - 这可能吗?如果没有,为什么
- 如果赋值运算符设为私有,为什么仍允许此赋值?
- 如果我只实现了运算符<,我可以使用运算符 == 吗?
- 如果C 中的支架重载运算符被声明为const函数
- 为什么合成的复制分配运算符被定义为如果类有参考成员,则将其定义为删除
- 用户输入逻辑运算符符号或数字,如果输入字符或字符串则无效
- 运算符== 如果我包含<iostream>,则不编译
- (C++)重载运算符<<,如果我不使用endl,则覆盖输出
- 如果运算符<对浮点类型正常工作,为什么我们不能将其用于相等性测试?
- 如果 -> 运算符不返回像点这样的引用怎么办。算子?这也会停止重载 -> 运算符吗?