gpt4 book ai didi

c++ - 添加到具有可变值的 map

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:33 25 4
gpt4 key购买 nike

假设我有一个 map<string, vector<int>>称为 my_map我想联系 42到 key "foo" .来自 Java,我希望必须做这样的事情

if (my_map.find("foo") != my_map.end()) {
my_map["foo"].push_back(42);
} else {
vector<int> my_vector;
my_map["foo"] = my_vector;
my_vector.push_back(42);
}

令我惊讶的是,我发现我可以做到

my_map["foo"].push_back(42);

这是如何运作的?什么会 my_map["foo"]如果 map 值的类型没有不带参数的构造函数怎么办?假设您想以不同于使用空构造函数的方式初始化所有值?在 Java 中,我可以做到

map.computeIfAbsent("foo", **some supplier of Vectors**).add(42);

C++ 中是否有等效项?

最佳答案

my_map["foo"] 默认构造一个新值(如果它尚不存在)。因此,如果值类型不是默认可构造的(即没有不带参数的构造函数),则会导致编译错误。然后,您必须执行以下操作:

my_map.emplace("foo", param).first->second.push_back(42);

在哪里emplace将从 param 构造您的值(如果它尚不存在)。

std::pair 中的分段构造函数可以提供更多参数:

my_map.emplace(
std::piecewise_construct,
std::forward_as_tuple("foo"),
std::forward_as_tuple(param1, param2, param3)
).first->second.push_back(42);

关于c++ - 添加到具有可变值的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com