[英]C++ set how to check if a list of sets contains a subset
我有一个集合列表,现在列表是一个向量,但它不需要是。
vector<unordered_set<int>> setlist;
然后我用一些数据填充它,例如它看起来像这样:
[ {1, 2}, {2, 3}, {5, 9} ]
现在我有另一组,可以这样说: {1, 2, 3}
我想检查列表中的这些集合是否是上述集合的子集。 例如,setlist[0] 和 setlist[1] 都是子集,因此 output 为true
我的想法是遍历整个向量并检查是否有任何索引是使用std::includes
function 的子集,但我正在寻找一种更快的方法。 这可能吗?
考虑改用set<int>
列表。 这允许您使用std::include
。 在按集合中元素的数量对向量进行排序后(即从元素数量最少的集合到项目数量最多的集合)对向量运行循环。 内部循环将从当前索引开始。 这可以避免您检查较小集合中是否包含较大集合。
如果整数的范围不太大,您可以考虑使用std::bitset
实现集合(如果包含 n,则位 n 为真)。 然后通过非常快速的逻辑操作(例如subset & large_set == subset
)完成包含测试。 您仍然可以按count
对向量进行排序,但不确定考虑到逻辑运算的速度是否需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.