448,679 Members | 1,063 Online Need help? Post your question and get tips & solutions from a community of 448,679 IT Pros & Developers. It's quick & easy.

# Sorting a vector of user defined type

 P: 7 Hi, I am trying to apply the sort() algorithm on a vector of structs. I want the vector to be sorted according to one of the struct fields. I see two ways in which this could be done, and neither seems to work. Here are the struct and the vector: Expand|Select|Wrap|Line Numbers     struct item_calculation      {         int item_num;         float weight;         float contribution;         float prediction;     };                  vector found_items;  I want the vector "found_items" to be sorted by the field "prediction". The first way to do the task is defining a comparison function and sending it do sort() as a parameter: Expand|Select|Wrap|Line Numbers     bool less_than( item_calculation a, item_calculation b ) {         return a.prediction < b.prediction;     };               . . .     sort(found_items.begin(), found_items.end(), less_than);  This results with the errors: "error C3867: 'CCFEApp::less_than': function call missing argument list; use '&CCFEApp::less_than' to create a pointer to member."; "error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided" when using "&CCFEApp::less_than" I get the error: "error C2914: 'std::sort' : cannot deduce template argument as function argument is ambiguous". The second way to do the task is by overloading the "<" operator: Expand|Select|Wrap|Line Numbers     bool operator<(item_calculation a, item_calculation b) {         return a.prediction < b.prediction;     };  gives: "error C2804: binary 'operator <' has too many parameters". After changing to: Expand|Select|Wrap|Line Numbers     bool operator<(item_calculation b) {         return prediction < b.prediction;     };  one gets: "error C2065: 'prediction' : undeclared identifier". I would apreciate any help. Thanks, Avi. P.S. I am working under Visual Studio 2005. Sep 12 '06 #1 