2
A
回答
6
您可以使用:std::set_intersection
为,只要你第一个两个列表进行排序:
例子:
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> list1{2, 5, 7, 8, -3, 7};
std::list<int> list2{9, 1, 6, 3, 5, 2, 11, 0};
list1.sort();
list2.sort();
std::list<int> out;
std::set_intersection(list1.begin(), list1.end(), list2.begin(), list2.end(),
std::back_inserter(out));
for(auto k : out)
std::cout << k << ' ';
}
输出:
2 5
编辑:
以上方法很可能不会荷兰国际集团是最佳的,主要是因为分选std::list
是不是很好的CPU ...
对于空间的权衡,下面的方法一定会成为更大的数据集的速度更快,因为我们遍历通过每个列表只有一次,而且所有的操作在每次迭代完成不超越一个O(1)
摊销复杂
我用std::unordered_multiset
而不是std::unordered_set
因为它保留了普通副本的出现次数在这两个列表
我跑dirty benchmark对随机生成的9000
int
S中的两种方法,其结果是(越低越好):
- :
Average timings for 100 runs: intersection_of: 8.16 ms sortAndIntersect: 18.38 ms
使用
std::set_intersection
方法的分析分类列表1的大小N
是:O(Nlog(N))
- 排序表2大小
M
的是:O(Mlog(M))
- 寻找交集:
O(M + N)
- 总:
O(Nlog(N) + Mlog(M) + M + N)
...(概括为对数的)
假设M
和N
是相等的,我们可以概括它为:O(Nlog(N))
但是,如果我们使用intersection_of
方法我张贴以上:
- 迭代通过列表1的大小为
N
并且添加到该集合中的是:O(N) + O(1) = O(N)
- 遍历列表2大小
M
,检查多重集的,加入到out
,从列表中除去2:O(M) + O(1) + O(1) + O(1)
=O(M)
- 总计:
O(M + N)
...(概括为线性)
假设M
和N
是相等的,我们可以将其概括为:O(N)
相关问题
- 1. 如何识别Scala Spark中两个数组之间的交集?
- 2. 删除SQL Server中两个表之间的交集
- 3. 如何计算两个以上HashSets之间的交集?
- 4. C# - IComparable对象列表之间的交集
- 5. 如何在两个python应用程序之间交换数据?
- 6. 计算包含范围的两个列表之间的交集/截距
- 7. 我如何在两个水平列表之间交叉一列的范围?
- 8. 两个链接列表的交集
- 9. 两个大单词列表的交集
- 10. 如何交换C中链接列表中的两个节点?
- 11. 如何在Scala中的两个列表之间执行集合论操作?
- 12. 如何查找SQL Server中两个交叉列之间的时间(秒)
- 13. 2个范围集之间的交集
- 14. 两个不在Python中使用集合的列表之间的通用元素
- 15. 如何获取两个列表并返回Python中的集合的交集?
- 16. 获取两个提交之间的所有标记列表
- 17. 列表git提交两个日期之间的主分支
- 18. 如何在XUL中的两个列表框之间拖放?
- 19. 如何在SQL Server中的两列之间交换数据?
- 20. 如何在两个多边形之间的交集中显示图像?
- 21. 两个分支之间的非集成更改列表
- 22. 如何将列插入两个现有列之间的数据集中?
- 23. 计划之间的交集之间的交集
- 24. 如何返回两个列表之间的多个连接
- 25. 链接两个表之间的列
- 26. 两个列表之间的范围
- 27. 如何减少html表中两列之间的空间
- 28. 查找两列之间的交点
- 29. 在两个recyclerView列表之间交换项目
- 30. SQL其中两个时间列之间的两个时间值
如果列表*它们自己* co ntain重复? – Bathsheba
请[阅读关于如何提出好问题](http://stackoverflow.com/help/how-to-ask),并学习如何创建[最小,完整和可验证示例](http:// stackoverflow .COM /帮助/ MCVE)。 –
一种方法是遵循此处给出的示例:http://en.cppreference.com/w/cpp/algorithm/set_intersection。 – Bathsheba