【发布时间】:2017-08-15 02:12:54
【问题描述】:
我有很多向量(大约 10^4,甚至更多!)而且我将从流中获得更多的输入向量。所以,例如,我有
-
v1 = 1 0 4 1 1 v2 = 1 1 2 5 3 6 2v3 = 0 1 1 5 0
我有 10^4 个这样的向量
现在,我输入了一个向量v4 = 0 1 1 5 0,我想检查它之前是否出现过,你建议我怎么做?
我将列出我想到的技术,以及伴随它们的错误:
- 使用
std::map或std::set相同。但是,std::map std::set不支持向量作为参数。 - 要将向量中的每个整数转换为字符串类型,请按顺序附加它们并将字符串存储在映射中。错误:
v5 = 11 1 1 1和v6 = 1 1 1 1 1的大小写将显示为相同。 - 与上面类似,只是在每个整数后添加一个分隔符。错误:编码太乏味?
我想知道您是否可以想出一些方法来实现这一点?
编辑: 对于 10^4,这是可以实现的。我的新任务要求我最多存储 10^9。我个人认为 STL 没有那么大的空间,他们抛出了SIGABRT 错误。您知道在这种情况下可以使用的任何其他有效散列方法吗?
【问题讨论】:
-
将向量转换为逗号分隔的字符串应该不会很繁琐。这似乎是解决这个问题的最简单方法。
-
我认为散列函数会有所帮助
-
你考虑过Bloom filter吗?
-
将向量存储在 trie 结构中。然后你就可以非常轻松高效地检查它了
-
@hiteshn97 是什么让您认为
std::set<std::vector<int>>不是有效类型?
标签: c++ vector stl implementation