Sorting user defined structure in C++ -
i have data structure of following form:
struct e{ unsigned k; unsigned c; unsigned v[100]; }; main() { vector<e*> vece; e e1; e1.k=10; e1.c=20; e1.v[0]=30; e1.v[1]=31; vece.push_back(&e1); e e2; e2.k=101; e2.c=28; e2.v[0]=82; e2.v[1]=32; vece.push_back(&e2); //sort vece e.k of structure }
i have large vece containing thousands of objects of type e. need sort vece again , again. fastest way can sort vece in-memory -- here vece sorted on e.k. 1 of ways 1 can same building priority queue. priority rather expensive due insertions. there other fast way can sort vece on "k".
also after sorting , outputting results user want delete vece entirely..but can not consists of pointers e. how can destroy vece completely, values pointed e deleted.
the gcc version using is: gcc (ubuntu/linaro 4.6.4-6ubuntu2) 4.6.4
given e
quite big structure, should have vector<e*>
, swapping elements fast swapping single integer. can use either sort
or stable_sort
standard header <algorithm>
(see http://www.cplusplus.com/reference/algorithm/).
vector<e*> vece; sort(vece.begin(),vece.end(),compe);
with:
bool compe(e* first,e* second) { return (first->k < second->k); }
at end delete elements way:
for(auto e: vece) { delete e; }
you don't need delete vector itself, because has automatic storage duration, , destroyed @ scope exit.
Comments
Post a Comment