gpt4 book ai didi

c++ - 为什么 unordered_map 的 emplace with piecewise_construct 参数需要默认构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:24:42 24 4
gpt4 key购买 nike

我有一个 unordered_map哪些商店<string, A>对。我想用这个片段放置对:

        map.emplace(std::piecewise_construct,
std::forward_as_tuple(name),
std::forward_as_tuple(constructorArg1, constructorArg1, constructorArg1));

但是如果我的A类没有默认构造函数,因此无法编译并出现此错误:

'A::A': no appropriate default constructor available

C:\Program Files (x86)\Microsoft Visual Studio14.0\VC\include\tuple 1180

为什么它需要一个默认构造函数,我怎样才能避免使用它?

最佳答案

std::unordered_map 需要默认构造函数是因为 operator[]。如果 map 中不存在 keymap[key] 将使用默认构造函数构造新元素。

您完全可以在没有默认构造函数的情况下使用 map。例如。以下程序将编译无错误。

struct A {
int x;
A(int x) : x(x) {}
};

...

std::unordered_map<int, A> b;

b.emplace(std::piecewise_construct,
std::forward_as_tuple(1),
std::forward_as_tuple(2));
b.at(1).x = 2;

关于c++ - 为什么 unordered_map 的 emplace with piecewise_construct 参数需要默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553086/

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