我正在处理一些二进制数据,这些数据存储在任意长的无符号整数数组中。我发现我有一些重复的数据,并希望在短期内忽略重复数据,并从长远来看消除导致它们的任何错误。
我正在考虑在存储之前将每个数据集插入到 map 中,但前提是在开始时在 map 中找不到它。我最初的想法是拥有一个字符串映射并使用 memcpy 作为锤子将整数强制转换为字符数组,然后将其复制到字符串中并存储字符串。这失败了,因为我的大量数据包含 0
的多个字节(又名 NULL
)在相关数据的前面,因此大部分非常真实的数据都被丢弃了。
我的下一次尝试计划是 std::map<std::vector<unsigned char>,int>
,但我意识到我不知道 map 插入功能是否会起作用。
这是可行的,即使是不明智的,还是有更好的方法来解决这个问题?
编辑
所以有人说我没有说清楚我在做什么,所以这里有一个更好的描述。
我正在生成一个最小生成树,因为我有许多包含我正在使用的实际端节点的树。目标是选择长度最短且覆盖所有末端节点的树,其中所选择的树最多彼此共享一个节点并且全部连接。我的方法基于二叉决策树,但进行了一些更改以希望实现更大的并行性。
我选择用无符号整数为每个数据集创建一个位 vector ,而不是采用二叉树方法,其中位位置的 1 表示包含相应的树。
例如,如果只有树 0 包含在 5 棵树的数据集中,我会开始
00001
从这里我可以生成:
00011
00101
01001
10001
然后可以并行处理其中的每一个,因为它们都不相互依赖。我对所有单棵树(00010、00100 等)执行此操作,并且我应该没有花时间正式证明它,能够生成范围 (0,2^n) 内的所有值一次而且只有一次。
我开始注意到许多数据集的完成时间比我想象的要长得多,并启用了一个调试输出来查看所有生成的结果,然后一个快速的 Perl 脚本确认我有多个进程产生相同的输出。从那以后,我一直在尝试解决重复项的来源,但收效甚微,我希望这能很好地让我验证生成的结果,而无需等待 3 天。计算。
最佳答案
你不会有问题,因为 std::vector 为你提供了“==”、“<”和“>”运算符:
http://en.cppreference.com/w/cpp/container/vector/operator_cmp
关于c++ - 带有 vector 作为键的 STL 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903737/