本文主要总结如何利用容器对类类型的对象进行排序。
以容器set为例,存储类型为:
class book{
private:
string name;
double price;
public:
double getprice(){return price;}
book(string n,double d):name(n),price(d){}
void display(){cout<<name<<"\t"<<price<<endl;}
};
1.利用函数对象进行排序
set的第二个模板参数接受一个排序的函数对象,可利用这种函数对象的形式进行排序
struct compare{
bool operator()(book b1,book b2){
return b1.getprice()<b2.getprice();
}
};
set<book,compare> sb;
2.利用函数指针对容器进行排序
其实函数指针本质上与函数对象是一样的,但是形式不同,所以单独列举出来。
先写一个用于排序的函数。
bool compare(book b1, book b2){
return b1.getprice()<b2.getprice();
}
有多种函数指针的形式,这里简要列举一下
set<book, bool (*)(book,book)> sb{compare};
typedef bool (*com)(book,book);
set<book,com> sb{compare};set<book, decltype(compare)*> sb{compare};
3.类重载<运算符
bool operator <(const book &b1)const {return price<b1.price;}