我調用了一個庫函數,該函數接受指向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