第一种方式:
函数比较器
写一个比较器:
bool cmp(const student& a,const student& b) {
if (a.id > b.id) {
return false;
}
else {
return true;
}
}
bool cmp_up_age(student& a, student& b) {
if (a.age > b.age) {
return false;
}
else {
return true;
}
}
让student对象随着student的id进行排序,因为写一个比较cmp;
int main() {
student a(1, 10);
student b(2, 20);
student c(3, 9);
vector<student> nums;
nums.push_back(a);
nums.push_back(b);
nums.push_back(c);
sort(nums.begin(), nums.end(), cmp_up_age);
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i].id << " " << nums[i].age << endl;
}
system("pause");
//sort(nums.begin(), nums.end(), cmp_up_age);
}
按照默认排序的话,基本上是按照地址顺序来进行排序的。这种形式也可以用在有堆的结构比如优先级队列还有set这些具有自动排序功能的数据结构里面去。
返回true就是第一个数排在前面
返回false就是第一个数排在后面
第二种方式:
函数对象比较器
所谓函数对象是指实现了 operator ()
的类或者结构体。可以用这样的一个对象来代替函数作为比较器。
struct cmp_up_id{
bool operator()(const student &a, const student &b) {
//(student& a,student& b)
if (a.id > b.id) {
return false;
}
else {
return true;
}
}
};
int main() {
student a(1, 10);
student b(10, 20);
student c(3, 9);
vector<student> nums;
nums.push_back(a);
nums.push_back(b);
nums.push_back(c);
sort(nums.begin(), nums.end(), cmp_up_id());
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i].id << " " << nums[i].age << endl;
}
system("pause");
//sort(nums.begin(), nums.end(), cmp_up_age);
}
//1,10
//3,9
//10,20