2012-03-14 2 views
3

Можно создать дубликат:
How to use std::sort with a vector of structures and compare function?Сортировка вектор объектов по атрибутам объекта

У меня есть объект кошки (что?) И объект catSort, который, очевидно, сортирует объекты кошки. Ниже приведены классы

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(); 

У меня возникли трудности с сортировкой вектора, как бы я это сделал? Должен ли я просто пройти через атрибут cats и сохранить их во временном векторе, а затем вернуть это? Есть ли более простой способ сделать это?

+0

[Взгляд вверх std :: sort] (http://msdn.microsoft.com/en-us/library/ecdecxh1 (v = vs.80) .aspx). Вы хотите использовать предикат, чтобы рассказать ему, как сортировать 'cat' объекты. –

ответ

11

Вы должны реализовать operator< на кота, так что кошки могут быть отсортированы:

class cat { 
public: 
    int age; 
    bool operator< (const cat &other) const { 
     return age < other.age; 
    } 
}; 

Вы можете включить заголовок «алгоритм» и использовать std::sort в массиве:

vector<cat> catSorter::SortCatsByAge(){ 
    vector<cat> cats_copy = cats; 
    std::sort(cats_copy.begin(), cats_copy.end()); 
    return cats_copy; 
} 
+1

Что делать, если у вас нет доступа к классу 'cat', или вы хотите сортировать по различным свойствам для разных целей? –

+0

@DrewNoakes вы можете определить 'operator <' как бесплатную функцию или предоставить пользовательскую функцию сравнения в качестве третьего аргумента в 'std :: sort'. – mfontanini

+0

Зачем нужно 'std :: sort (cats_copy.begin(), cats_copy.end()); сортировать по возрасту? Как насчет длины меха или имени кошки в алфавитном порядке? – Jonny

Смежные вопросы