Q设置交集而不丢失元素

问题描述 投票:0回答:2

如何在 2 个 QSet 之间求交集,其中第一个 QSet 不会丢失元素,而只返回结果交集?

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

QSet<int> a, b;
a.insert(1);
a.insert(2);         // { 1, 2 }
b.insert(1);         // { 1 }
a.intersection(b);   // { 1 }  
a                    // { 1 }
c++ qt set
2个回答
8
投票

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

重载的

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

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.