0

如何在第一个不丢失元素的 2 个 QSet 之间进行交集,而只返回结果交集?

原因是我试图与一些集合执行许多交集,但不得不找出在这个过程中元素丢失的艰难方式。

QSet<int> a, b;
a.insert(1);
a.insert(2);         // { 1, 2 }
b.insert(1);         // { 1 }
a.intersection(b);   // { 1 }  
a                    // { 1 }
4

2 回答 2

8

intersect修改您应用它的集合。如果您不想这样做,请不要使用intersect.

重载operator&返回一个新的,它是两个sQSet的交集。QSet还有一个赋值运算符operator&=

QSet是基于哈希的。如果您正在使用小整数集并且您关心效率,则QBitArray可能会更好。

于 2013-09-18T22:27:20.770 回答
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;
}
于 2013-09-18T22:22:57.737 回答