Я вызываю библиотечную функцию, которая принимает указатель на 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
@Potatoswatter: Да объекты выделены в кучу. Я думал, что если бы это был массив, я бы передал «часть оригинального массива, просто указав индексы массива», но в случае std :: set я не могу этого сделать (или есть ли способ сделать это?) – Atul