我有一个大小超过 500 万的向量,每次我想从向量中取出一个键最小的元素,并对这个元素做一些处理。然而,随着这个特定元素的处理,向量中的所有剩余元素也将受到影响,以便它们的键更新。所以下次如果我想从向量中取出键最小的元素,我必须再次对向量进行排序。问题是从向量中拾取最小元素的次数会高达50万,所以程序运行的很慢。为了您更清楚地理解,我可以编写以下代码来说明:
void function(vector<MyObj*>& A)
{ //A.size() is near 5 million, maybe even more such as 50 million.
make_heap(A.begin(), A.end(), compare); // compare function is self-defined.
for (int i=0; i<500000; i++)
{
MyObj* smallest_elem = A.front();
pop_heap(A.begin(), A.end());
A.pop_back();
Process_MyObj(smallest_elem); // here all of the elements
// in A will be affect, causing
// their keys changed.
make_heap(A.begin(), A.end()); // Since all elements' keys in A changed,
// so heap sorting A once again is
// necessary in my viewpoint.
}
}
有没有办法让代码尽可能高效地运行?欢迎任何想法,而不是算法的有限改进,例如并行或其他任何东西。太感谢了!