From: Ian S. <ian...@st...> - 2002-02-01 15:25:50
|
try using references in your comparator (in your first case) bool operator<( const (peak*) &p2) const { return val < p2->val; } > -----Original Message----- > From: Andreas Turina [mailto:at...@vi...] > Sent: Friday, February 01, 2002 3:17 PM > To: vxl...@li... > Subject: [Vxl-users] VCL: Sorting with user-defined classes > > > Hi, > > I have a user-defined datastructure where multiple instances > thereof are > stored in a vcl_vector. This vector needs to be sorted. > > More precisely, my simple datastructure looks like this: > > struct peak > { > peak(int xx, int yy, double vval): > x(xx), y(yy), val(vval) {}; > int x; > int y; > > double val; // Sort key > > bool operator<( const peak* p2) const { > return val < p2->val; > } > }; > > and > > vcl_vector<peak*> pl; > > The sort key is val. > > I experimented with two instantiation files in a Templates/ directory: > VCL_VECTOR_INSTANTIATE(peak*); > > VCL_SORT_INSTANTIATE(vcl_vector<peak*>::iterator, peak); > > and tried the sort as follows: > > vcl_sort( pl.begin(), pl.end() ); > > It seems to me that the entries in pl are sorted according to their > address values in memory, rather than to the intended sort key val. > > 1. Any suggestions how the vcl_vector<peak*> can be sorted > correctly (or > what did I do wrong ) ? > > 2. An alternative way is to make use of a function object, like > > struct peak_comp{ > bool operator()(const peak* a, const peak* b){ > return a->val < b->val; > } > }; > peak_comp pcomp; > sort(pl.begin(), pl.end(), pcomp); > > Any ideas how can this be done with the vxl version I currently > use ? > > targetjr-5.0b (ok, this version is quite old..) > gcc-2.95.2 > Solaris 5.6 > > Thanks ! > > Regards, > > Andreas > > > > > _______________________________________________ > Vxl-users mailing list > Vxl...@li... > https://lists.sourceforge.net/lists/listinfo/vxl-users > |