stl sort() 自定义比较函数

sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,即不可以写在类中;如果写在类中,也需要加static关键字,否则会报错.

原因:非静态成员函数是依赖于具体对象的,而像std::sort这类函数是全局的,因此无法在sort中调用非静态成员函数。
静态成员函数或者全局函数是不依赖于具体对象的,可以独立访问,无须创建任何对象实例就可以访问。同时,静态成员函数不可以调用类的非静态成员。

ps:自定义sort的比较逻辑,除了这种方法,还可以用 重载<运算符、或定义比较类。
ps:sort不是稳定排序,stable_sort才是。

不解之处:
文档中说:在std :: sort中,您可以提供第三个参数,该参数是对列表进行排序的基础.如果您希望第一个参数首先出现,那么您将返回true.如果你想要第二个参数首先出现,则返回false.
那如果第一个参数、第二个参数相等时,返回什么呢?sort本身是不稳定的,返回真假好像都无所谓。那如果是用在stable_sort中呢?

//假设待排序类型为mytype
bool cmp(const mytype& a, const mytype& b){
}

//如果在类中,则这样写
static bool cmp(const mytype& a, const mytype& b){
}

//这样调用, 前两个参数可以是迭代器、指针
sort(mytype.begin(), mytype.end(), cmp);

之前笔试,有道需要排序的题,本鶸想不起来这个东西怎么写,就准备用c的qsort,写完后发现用qsort代码需要改动的地方太多,然后迫不得己手写了个归并,结果浪费了好长时间。唉。。。。

发布了104 篇原创文章 · 获赞 32 · 访问量 8605

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/105164997
今日推荐