如何在2个QSets之间进行交集,其中第一个不丢失元素,但只返回结果的交集?
原因是我试图与一些集合执行许多交叉,但必须找出元素在此过程中丢失的困难方式。
QSet<int> a, b;
a.insert(1);
a.insert(2); // { 1, 2 }
b.insert(1); // { 1 }
a.intersection(b); // { 1 }
a // { 1 }
答案 0 :(得分:7)
intersect
修改您应用它的集合。如果您不想这样做,请不要使用intersect
。
重载的operator&
会返回一个新的QSet
,它是两个QSet
的交集。还有一个赋值运算符operator&=
。
答案 1 :(得分:0)
如果您不想复制原始集然后将其相交,则可以创建一个从交集创建新集的函数:
template<class T>
QSet<T> intersectSets(const QSet<T>& a, const QSet<T>& b) {
QSet<T> result;
foreach(const T& value, a)
if (b.contains(value))
result.insert(value);
return result;
}