QSet交集不丢失元素

时间:2013-09-18 22:11:52

标签: c++ qt set

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

原因是我试图与一些集合执行许多交叉,但必须找出元素在此过程中丢失的困难方式。

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

2 个答案:

答案 0 :(得分:7)

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

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

QSet基于哈希。如果您正在处理小整数集并且您关注效率,QBitArray可能会更好。

答案 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;
}