[英]Sorting a vector of objects containing two data members using std::sort
[英]sorting elements of a vector containing objects
我上課了,這個班級包含一個數字。 而且我有一個包含類的對象指針的向量。 我想根據對象的數量對它們進行排序。 我怎樣才能做到這一點? 感謝您的回答。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Course
{
public:
Course (int code, string const& name) : name(n), code(c) {}
int getCourseCode() const { return code; }
string const& getName() const { return name; }
private:
string name;
int code;
};
int main()
{
vector<Course*> cor;
vector<Course*>::iterator itcor;
cor.push_back(new Course(3,"first"));
cor.push_back(new Course(2,"sekond"));
cor.push_back(new Course(4,"third"));
cor.push_back(new Course(1,"fourth"));
cor.push_back(new Course(5,"fifth"));
sort (cor.begin(), cor.end());
for (itcor=cor.begin(); itcor!=cor.end(); ++itcor) {
cout << *itcor << ' ';
}
}
例如,當我想要對對象進行排序時,它們將根據其地址進行排序。
您需要為std::sort
方法提供一個自定義比較器類或函數,以使其不按地址排序。
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
comp
可以定義為:
bool comparer(const Course* x, const Course* y) { /*compare*/ }
//or
struct comparer {
bool operator() (const Course* x, const Course* y) { /*compare*/ }
} comparerObject;
並調用排序為:
std::sort(cor.begin(), cor.end(), comparer); //method alternative
要么
std::sort(cor.begin(), cor.end(), comparerObject); //class alternative
那,或者不要在vector
保留指針。 從您發布的代碼中,尚不清楚您是否確實需要指針:
vector<Course> cor;
應該足夠了。
您可以通過三種方式執行此操作:
1)重載<運算符,並調用std :: sort算法。 該代碼將如下所示:
bool operator<(Course *a, Course *b) const {
// do comparison
return A_BOOL_VALUE;
}
std::sort(array_of_courses.begin(),array_of_courses.end());
第一種方法是錯誤的,因為您不能在指針中重載<運算符。
2)創建一個compare函數,然后調用std::sort
的第二個版本。 代碼如下:
bool compare(Course *a,Course *b) {
// do comparison
return A_BOOL_VALUE;
}
std::sort(array_of_courses.begin(),array_of_courses.end(),compare);
3)創建一個比較類,該類重載了()
運算符,然后調用std::sort
的第三個版本。 編碼:
struct Compare {
bool operator()(Course *a, Course *b) {
// do comparison
return A_BOOL_VALUE;
}
};
std::sort(array_of_courses.begin(),array_of_courses.end(),Compare);
注意:可以在algorithm
頭文件中找到排序功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.