我有一个hashSet,具有0到X个数字和高整数值。
0:1000000001
1:1000000002
...
和位置向量(22,14,29,59,10)。
我需要生成此向量的所有组合。
为此,我使用https://github.com/mraggi/discreture中的库进行生成。我得到了矢量大小和need_comb_size的所有组合
如(10,3)
0,1,2
0,1,3
...
现在我将生成的组合与我的矢量位置和hashSet链接起来 hashSet [vect [comb [0]] + ...
我可以与reduce
一起使用它吗?
目标是生成一个高整数(哈希),并将此哈希用作键,并使用梳子示例中的位置:(12,59,11)作为值。
3423422821:矢量(((12,59,11)<-位置,(3,19,299,490)<-尺寸)。如果梳子在任何维度上具有相同的签名,则将添加该维度。
void combination(int size, vector<unsigned short> chunk, vector<unsigned long long> hashSet, unordered_map<unsigned long long, pair<vector<unsigned short>, vector<unsigned short>>> collision_map, unsigned long long low, unsigned long long high, int dimension) {
for (auto&& comb : discreture::combinations_stack(size,KCOMB))
{
unsigned long long signature = 0;
vector<unsigned short> newChunk;
//signature = reduce(std::execution::par, comb.begin(), comb.end())
for (auto v : comb) {
signature += hashSet.at(chunk.at(v));
newChunk.push_back(chunk.at(v));
}
checkSignature(low, high, signature, collision_map, newChunk, dimension);
}
}
答案 0 :(得分:2)
请注意,std::reduce
有一个警告
如果
binary_op
不具有关联性或不具有可交换性,则该行为是不确定的。
如果您关心newChunk
中元素的顺序,则不能在内部循环中使用reduce
。
如果您关心对checkSignature
的调用顺序,则不能在外部循环中使用reduce
,否则您仍然必须综合一个值以将其丢弃,因为您不能通过void
作为累加器。