我调用了一个库函数,该函数接受指向std::set
的指针并处理它的元素。获取std :: set子集的有效方法
但是,它只处理一定数量的元素(比方说100),如果该集合有更多的元素,它只会引发异常。不过,我收到了一套更大的尺寸。所以我需要有效的方法来获得std::set
的子集。
目前,我将100个元素复制到临时集并将其传递给该函数。
struct MyClass
{
// Class having considerably large size instance
};
// Library function that processes set having only 100 elements at a time
void ProcessSet (std::set<MyClass>* ptrMyClassObjectsSet);
void FunctionToProcessLargeSet (std::set<MyClass>& MyClassObjSet)
{
std::set<MyClass> MyClass100ObjSet;
// Cannot pass MyClassObject as it is to ProcessSet as it might have large number of elements
// So create set of 100 elements and pass it to the function
std::set<MyClass>::iterator it;
for (it = MyClassObjSet.begin(); it != MyClassObjSet.end(); ++it)
{
MyClass100ObjSet.insert (*it);
if (MyClass100ObjSet.size() == 100)
{
ProcessSet (&MyClass100ObjSet);
MyClass100ObjSet.clear();
}
}
// Prrocess remaining elments
ProcessSet (&MyClass100ObjSet);
MyClass100ObjSet.clear();
}
但它影响性能。任何人都可以建议更好的方法来做到这一点?
你可以展示你目前在做什么的[mcve]? – NathanOliver
如果库需要一系列小的'std :: set'对象,那么这就是你必须创建的。事实上,他们是其他东西的子集似乎没有帮助。图书馆是否提供其他选择?他们是堆分配的对象,如“std :: string”? – Potatoswatter
@Patatoswatter:对象是堆分配。我在想如果它是数组,我会通过指定数组索引来传递“原始数组的子部分”,但在std :: set的情况下我不能这样做(或者有什么办法可以做到这一点?) – Atul