By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,679 Members | 1,063 Online
Bytes IT Community
+ Ask a Question
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
  1.     struct item_calculation 
  2.     {
  3.         int item_num;
  4.         float weight;
  5.         float contribution;
  6.         float prediction;
  7.     };
  8.  
  9.                vector<item_calculation> 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
  1.     bool less_than( item_calculation a, item_calculation b ) {
  2.         return a.prediction < b.prediction;
  3.     };              
  4. .
  5. .
  6. .
  7.     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
  1.     bool operator<(item_calculation a, item_calculation b) {
  2.         return a.prediction < b.prediction;
  3.     }; 
gives: "error C2804: binary 'operator <' has too many parameters".

After changing to:
Expand|Select|Wrap|Line Numbers
  1.     bool operator<(item_calculation b) {
  2.         return prediction < b.prediction;
  3.     }; 
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
Share this Question
Share on Google+
1 Reply


100+
P: 293
D_C
I used a list, but I can't imagine it's that different for vectors.
Edit - This is also STL code.
Expand|Select|Wrap|Line Numbers
  1. static bool fname(Person l, Person r) // Person::fname
  2. {
  3.   return (l.getFname() < r.getFname());
  4. }
  5.  
  6. // list<Person> people;
  7. // Later when I needed to sort I used
  8. people.sort(Person::fname);
Sep 12 '06 #2

Post your reply

Sign in to post your reply or Sign up for a free account.