错误:没有匹配的构造函数来初始化"set<int>"

error: no matching constructor for initialization of 'set<int>'

本文关键字:gt set int lt 初始化 构造函数 错误      更新时间:2023-10-16

在C++中,我包含了set库:

#include <set>

我想创建一个包含与另一个集合相同的元素数量的集合。所以,我试了这个:

set<int> ret((int)ring.size());

但是,我收到此错误:

error: no matching constructor for initialization of 'set<int>'

知道如何从其声明中指定集合的大小吗?

知道如何从其声明中指定集合的大小吗?

没有

您可以将旧集复制到新集,从而填充该集,从而相应地增加其大小,或者向其插入唯一值,直到达到所需的大小。

您始终可以检查 ref 中可用的构造函数。


考虑一下:假设存在类似于您描述的构造函数。它必须默认初始化集合的值。但这意味着所有值都是相同的。这应该会产生大小为 1 的集合。

这并不完全合乎逻辑。您不会像为其他容器类型那样为set中的元素保留存储空间,例如 vector .此外,set中的所有元素必须是不同的,因此不能将元素设置为相同的值。

set中元素的数量完全由集合中的元素驱动。如果你想要一个与另一个集合具有相同数量元素的集合,那么你也可以使用复制构造函数

std::set旨在

存储独特的元素

如果那样的话:

set<int> ret((int)ring.size());

有可能隐式假设您要创建一个存储非唯一元素的容器。因此这是不可能的(这就是std::multiset的用途(。