我有两组(或映射)需要有效地处理它们的交集。
我知道有两种方法可以做到这一点:
- 像std::set_intersection一样迭代两个映射:O(n1+n2) - 迭代一个映射并在另一个映射中查找元素:O(n1*log(n2))
根据大小,这两个解决方案中的任何一个都明显更好(已经计时),因此我需要基于大小在这些算法之间切换(有点混乱) - 或者找到一种胜过两者的解决方案,例如使用某种map.find()的变体,将前一个迭代器作为提示(类似于map.emplace_hint(...)) - 但我找不到这样的函数。
问题:是否可能直接使用STL或某个兼容库结合这两个解决方案的性能特征?
请注意,性能要求使其与早期的问题不同,例如Efficient intersection of sets?。
- 像std::set_intersection一样迭代两个映射:O(n1+n2) - 迭代一个映射并在另一个映射中查找元素:O(n1*log(n2))
根据大小,这两个解决方案中的任何一个都明显更好(已经计时),因此我需要基于大小在这些算法之间切换(有点混乱) - 或者找到一种胜过两者的解决方案,例如使用某种map.find()的变体,将前一个迭代器作为提示(类似于map.emplace_hint(...)) - 但我找不到这样的函数。
问题:是否可能直接使用STL或某个兼容库结合这两个解决方案的性能特征?
请注意,性能要求使其与早期的问题不同,例如Efficient intersection of sets?。
if ((n1+n2) < n1*log2(n2))
,那么应该选择哪一个呢?(当然还需要考虑到n2*log2(n1)
)。顺便说一句,这并不是一个不同的要求,而只是在一般情况下如何高效地完成。抱歉挑剔了一下,我只是想更好地理解你的意思,尽管我仍然觉得这接近于重复问题。 - 463035818_is_not_a_number