c++11 对容器进行排序

来源:互联网 发布:绝地求生有数据接口吗 编辑:程序博客网 时间:2024/05/16 19:23

本文主要总结如何利用容器对类类型的对象进行排序。
以容器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;}
0 0