我正在处理一些二进制数据,这些数据存储在长度任意的无符号整数数组中。我发现数据有重复,并且希望短期忽略重复项并消除长期造成重复的错误。我计划将每个数据集插入到一个映射中存储,但前提是在映射中没有找到该数据集。我最初的想法是使用memcpy函数将整数强制转换为字符数组,并将其复制到字符串中存储,但这种方法失败了,因为我的许多数据包含在相关数据前面有多个字节的0(又名NULL),因此大部分真实数据被丢弃了。我的下一个尝试计划是使用std::map, int>,但是我意识到我不知道map插入函数是否会起作用。即使这可能并不明智,但这是可行的吗?或者有更好的方法来解决这个问题吗?
修改: 所以有人指出我没有清楚地说明我在做什么,所以这里有一个更好的描述。我正在生成一棵最小生成树,假设我有许多包含我正在使用的实际终节点的树。目标是选择覆盖所有端节点且共享最多一个节点并且都连接的树的选择,其长度最短。我基于二叉决策树的思路进行操作,但是我做出了一些更改,以便实现更大程度的并行性。我选择使用无符号整数制作每个数据集的位向量,其中位位置的1表示包含相应的树。例如,如果一个5个树的数据集中只包含树0,则从此处开始:00001。从这里我可以生成:00011、00101、01001和10001。
修改: 所以有人指出我没有清楚地说明我在做什么,所以这里有一个更好的描述。我正在生成一棵最小生成树,假设我有许多包含我正在使用的实际终节点的树。目标是选择覆盖所有端节点且共享最多一个节点并且都连接的树的选择,其长度最短。我基于二叉决策树的思路进行操作,但是我做出了一些更改,以便实现更大程度的并行性。我选择使用无符号整数制作每个数据集的位向量,其中位位置的1表示包含相应的树。例如,如果一个5个树的数据集中只包含树0,则从此处开始:00001。从这里我可以生成:00011、00101、01001和10001。
每个单独的树(00010,00100等等)都可以并行处理,因为它们之间没有依赖关系。我对所有的单独树都这样处理,应该能够生成范围在(0,2^n)内所有值仅一次。
我开始注意到许多数据集需要完成的时间比我预期的要长,于是启用了调试输出来查看所有生成的结果。经过一个快速的Perl脚本后,确认我有多个进程生成相同的输出。从那时起,我一直在努力解决重复项的来源,但是很少成功,希望这能够足够好地工作,让我验证正在生成的结果,而不需要等待计算时间长达3天的情况。
std::set
。 - brendanw