为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)

Set a default constructor for an element in an unordered_map in case of [] operator

本文关键字:如果 运算符 构造函数 默认 map unordered 设置 元素      更新时间:2023-10-16

我有这个类:

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)});
相关文章: