添加要迭代设置的元素
Add elements to set iteratively
假设我有一个数组{1,2,3},我必须添加这些元素来设置如下
Pass 1: {1}, {2}, {3} (Adding sets of size 1 )
Pass 2: Pass1 + {1,2}, {1,3} , {2,3} (Combination of sets of previous pass and sets of size 2)
Pass 3: Pass2 + {1,2,3}
最后,我的套装应该有{1},{2},{3}, {2,3},{1,3},{1,2},{1,2,3}
我试着给这个编码
void generateSets(int arr[], int size, int sum)
{
set<set<int> > mySet;
for(int i=0;i< size ; i++)
{
set< set<int> >::iterator iter;
**for (iter = mySet.begin(); iter != mySet.end(); ++iter)
{**
set<int> s(*iter);
for(int k=0;k<size; k++)
{
s.insert(arr[k]);
}
mySet.insert(s);
}
}
}
我无法生成像我提到的那样的集合。请有人帮我!!
实现这一点的方法通常涉及递归或类似的东西。
这个想法是"让递归处理"不包括1个元素的子集,一旦有了它,就需要添加包含这个元素的子集。
它应该看起来像这样:(这是一个类似c++的伪代码,而不是一个工作代码!)
//extend(set<set<int>>, int) is an auxilary function used by the main logic function
set<set<int>> extend(set<set<int>> original, int e) {
set<set<int>> result = new set<set<int>>();
for each set<int> s in original {
tempSet = s.clone();
tempSet.add(e);
result.add(tempSet);
}
return result;
}
//this is the main logic function
set<set<int> > findSets(int[] arr, int size) {
if (size == 0) return new set<set<int>>(new set<int>()); //return a set containing only an empty set
set<set<int>> results = new set<set<int>>(); //result set
results = findSets(arr,size-1); //all subsets without element arr[n-1], using recursion.
results.union(extend(results,arr[size-1]); //add all subsets containing arr[n-1]
return results;
}
相关文章:
- 在QComboBox或QListWidget中设置所选元素的样式文本?
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 无法在构造函数中执行设置元素插入
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)
- 在C++中将指针数组的所有元素设置为 nullptr
- C++:如何将枚举元素设置为无限?
- 如何在类中初始化数组并为第一个元素设置值
- 如何将Bools中的一个元素设置为true
- 如何将布尔矩阵的每个元素设置为false而不循环
- 将数组中的元素设置为 0 或 NULL
- 使用 while / do-while 循环进行数组元素设置
- C++:数组元素设置为0
- 将元素设置在两个尺寸 std::vector
- 为什么将地图的元素设置为其大小会在分配之前增加大小*
- 如何简洁地将cv::Mat中的每个元素设置为一些标量,如cvSet
- c++默认初始化是否将数组元素设置为默认值?
- 如何将数组中的每个元素设置为0
- 将结构体元素设置为定义中的值
- C++ DirectX11 将同一矢量中的元素设置为同一更新循环中的不同位置