c++11 对容器进行排序

本文主要总结如何利用容器对类类型的对象进行排序。
以容器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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值