Sort a vector of objects by an object's attribute
21,741
You should implement an operator<
on cat so that cats can be sorted:
class cat {
public:
int age;
bool operator< (const cat &other) const {
return age < other.age;
}
};
You can then include the "algorithm" header and use std::sort
on your array:
vector< cat > catSorter::SortCatsByAge(){
vector< cat > cats_copy = cats;
std::sort(cats_copy.begin(), cats_copy.end());
return cats_copy;
}
Comments
-
dotty about 4 years
Possible Duplicate:
How to use std::sort with a vector of structures and compare function?I have a cat object (what?) and a catSort object which obviously sorts the cat objects. Below is the classes
class cat { public: int age; }; class catSorter { public: vector< cat > cats; vector< cat > SortCatsByAge(); void AddCat( cat new_cat ); }; void catSorter::AddCat(cat new_cat){ this->cats.push_back(new_cat) } vector< cat > catSorter::SortCatsByAge(){ // Sort cats here by age! } cat tim; tim.age = 10; cat mark; mark.age = 20 cat phil; phil.age = 3; catSorter sorter; sorter->AddCat(tim); sorter->AddCat(mark); sorter->AddCat(phil); std::<vector> sortedcats = sorter->SortCatsByAge();
I'm having difficulties sorting a vector, how would I go about doing this? Should I just loop through the
cats
attribute and store them inside a temporary vector then return that? Is there an easier way to do this?