将基元类型插入到集合中
Inserting primitive type into set of sets
我正在寻找一些大小n
集的所有子集,例如{{}, {1}, {1, 2} etc. }
使用此处描述的方法。
我的问题出现在尝试使用 C++11 构建一组集合时。也就是说,我有一个包含我所有子集的set<set<int> > permutations
。如果我尝试将一些整数元素i
插入到permutations
中包含的每个子集中,如下所示:
for (set<set<int> >::iterator it = permutations.begin(); it != permutations.end(); ++it)
{
it->insert(i); //error here
}
我遇到了"没有与参数列表匹配的重载函数实例(对象具有阻止匹配的类型限定符"错误。我的理解是迭代器it
引用set<int>
对象,因此*it
具有成员函数insert()
。是什么导致了这个特定错误的出现?
不允许修改集合的元素,因为这会破坏集合使用的内部排序机制。因此,循环中的*it
类型是const set<int>&
.因此,您不能在其上调用插入。
您可以做的是制作元素的副本,将元素插入副本中,删除原始元素,然后将其替换为副本。
for (set<set<int> >::iterator it = permutations.begin(); it != permutations.end(); )
{
auto copy = *it;
copy.insert(i);
it = permutations.erase(it);
permutations.insert(copy);
}
请注意,如果在一个集合中插入一个元素使其与另一个元素相同,则不会插入该元素,并且您最终会在集合中少一个元素集。例如,如果你的集合是{{}, {1}, {1,2}}
,而i
是 1,那么上面的循环将查看空集合,向其添加一个 1(导致{1}
(,然后当它尝试重新添加该集合时它将失败,因为已经有一个具有该值的集合。
相关文章:
- 如何将结构插入到集合中并打印集合的成员
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 将基元类型插入到集合中
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- 如何将值插入到 c++ boost::multiindex 集合的特定索引中,就像在 std::list 中一样
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- 将地址插入到集合中,集合的大小小于预期
- 我可以在一行代码中将向量中与条件匹配的所有元素插入到集合中吗?
- 如何插入集合
- 如何在C++的集合中插入一系列元素
- 如何在集合中插入字符
- 将集合插入/读取到地图中
- 方法插入到任何stl集合中
- C - 如何将自己类型的值插入集合中
- 如何将数组插入无序集合
- 集合的复杂性::插入
- 将配对插入集合时编译错误
- 集合未插入
- 自定义比较器,将唯一元素插入到c++中的集合中
- 如何将对象插入到集合中