【发布时间】:2014-01-21 10:16:07
【问题描述】:
基本上我的问题和Intersection of two STL maps一样,但是有两个unordered_maps:
std::unordered_map<Key, Value> A;
std::unordered_map<Key, Value> B;
我想得到十字路口,类似于
std::unordered_map<Key, std::pair<Value, Value>> C;
其中键是 A 和 B 中的值,值是分别来自 A 和 B 的一对值。
实现这一目标的最快方法是什么?目前我遍历两者中最小的一个并在第二个中查询键。幸运的是,我的键类型通常很容易散列,但是我没有找到一种方法来获取迭代映射的键的散列值以节省第二个散列的计算(要清楚:我不知道如何在不重新计算的情况下恢复哈希,以及在哪里可以找到类似 find 的东西,并将计算的哈希作为参数 [1])。
谢谢。
[1] 是的,我知道,早期优化是许多疾病的根源。然而,我想知道这是否可能,而不是解释这将如何成为一堆错误。实际上,在某些情况下,根据用户输入,键 可能很复杂且散列成本很高。
【问题讨论】:
-
如果您订购了
maps,它会更简单,可能更快。 -
你能在你的类中缓存散列值吗?然后,在您的哈希函数中,您可以检查哈希是否已被计算并返回。如果任何键发生变化,请记住重新计算存储的哈希值。
-
@Alan:是的,我想过,但我想避免这种情况。
-
我建议您将示例输入和输出进行澄清,如果在 A 中找到某个键但在 B 中没有找到该算法应该怎么办?
-
任何交叉路口都会这样做:忽略。
标签: c++ c++11 stl unordered-map