c++ - 带有 vector 作为键的 STL 映射

标签 c++ search stl map vector

我正在处理一些二进制数据,这些数据存储在任意长的无符号整数数组中。我发现我有一些重复的数据,并希望在短期内忽略重复数据,并从长远来看消除导致它们的任何错误。

我正在考虑在存储之前将每个数据集插入到 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/

相关文章:

c++ - 访问 std::vector 容器内的数据

algorithm - O(1) 查找范围

c++ - 类似于返回迭代器的 advance 的函数?

c++ - 如何判断一个类型是否真正可 move 构造

c++ - 如何在 C++ 中使用成员变量作为默认参数?

c++ - OpenVMS 上 -F- atals 的 LIB$SIGNAL 问题

java - c++ 或 java 中用于保存 20 位整数的数据类型

SearchDelegate<String> 键盘操作按钮按下问题

java - 类似 Chrome 的可折叠搜索栏(在 java 中 - swing)

c++ - STL 顺序容器支持 insert (before) 而 forward_list 支持 insert_after