关于stable_sort()和sort()的区别

摘要:
您发现sort和stable_sort,以及partition和stable_partition,感觉很奇怪。不同的是,具有稳定的函数可以确保相等元素的原始相对顺序在排序后保持不变。在这里,我们需要找出一个问题。这里的相等意味着您提供的函数表示两个元素相等,而不一定是同一个元素。例如,如果您编写一个比较函数:bookles_len{returnstr1.length()<str2.lenth();}此时,“苹果”和“冬天”是相等的。如果“苹果”出现在“冬天”之前,则在使用具有稳定的函数排序后,它们的顺序必须保持不变。如果使用没有“stable”的函数进行排序,则排序后“winter”可能位于“apples”前面。

你发现有sort和stable_sort,还有 partition 和stable_partition, 感到奇怪吧。其中的区别是,带有stable的函数可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清 楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一摸一样的元素。

例如,如果你写一个比较函数:

bool less_len(const string &str1, const string &str2)
{
return str1.length() < str2.length();
}

此时,"apples" 和 "winter" 就是相等的,如果在"apples" 出现在"winter"前面,用带stable的函数排序后,他们的次序一定不变,如果你使用的是不带"stable"的函数排序,那么排序完 后,"winter"有可能在"apples"的前面。

免责声明:文章转载自《关于stable_sort()和sort()的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇golang 之GPM模型Python有返回值的函数_布尔函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Freemarker 基本数据类型

一 数据类型简介 freemarker 模板中的数据类型由如下几种: 1. 布尔型:等价于java中的boolean类型, 不同的是不能直接输出,可以转换成字符串再输出 2. 日期型:等价于java中的Date类型, 不同之处在于不能直接输出,需要转换成字符串再输出 3. 数值型:等价于java 中的int, float, double 等数值类型,有三...

C++——std::vector相关 (转)

转自: https://blog.csdn.net/tpriwwq/article/details/80609371 使用vector,需添加头文件#include<vector>, 要使用sort或find,则需要添加头文件#include<algorithm>。 为了简化书写,需在.h中增加using namespace std...

几种常见的排序算法分析

选择排序 选择排序是一种非常直观且简单的排序算法。它工作的流程是这样的: 首先找出数组中最小的那个元素,将它和数组的第一个元素交换位置;然后在第二个到最后一个元素中间找到最小的那个元素与数组的第二个元素交换位置。 就这样依次遍历,直到将整个数组排序。 选择排序不是稳定排序,但是是原地排序,时间复杂度是平方级,空间复杂度为1。 C++代码实现如下: #inc...

JS中sort()方法原理及使用,排序

sort()  方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要),以便进行比较。 语法:arrayObject.sort(sortby); 参数sortby  可选,用来规定排序的顺序,但必须是函数。 例一:按照字母顺序...