繁体   English   中英

n个列表的交集

[英]intersection of n lists

我一直在尝试找出在c ++中找到N个列表的交集的方法。

点击我的方法是排序,合并和迭代。

还有其他办法吗?

请分享您的建议。

使用std::sort每个列表进行std::sort (或者如果是std::list ,则使用std::list::sort ),然后使用std::set_intersection迭代计算相交(将其应用于前两个列表,然后应用于结果和第三个列表,然后到结果和第四个列表,依此类推)。

使用未排序列表的解决方案会更麻烦。 大概您会有一个“答案”列表,最初是空的。 然后,您将确定两个列表,并逐步执行一个; 对于每个元素,您将扫描另一个列表以查看该列表中是否存在该元素-如果存在匹配项,则将该元素存储在答案中。 然后,您将创建一个新的空答案列表,并逐步浏览另一个原始列表,在先前的答案列表中搜索匹配的元素,然后将其添加到新的答案列表中。 重复广告恶心。

这不是特别有效。

对于“排序,合并和迭代”解决方案,使用成对的列表,还不如同时迭代N个排序的列表有效,仅选择出现在所有列表中的元素作为答案的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM