首页 > 学院 > 开发设计 > 正文

stable_sort()与sort()的用法区别

2019-11-11 02:57:44
字体:
来源:转载
供稿:网友

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

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

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

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

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

举例说明:

#include <vector>#include <iostream>#include <algorithm>using namespace std;bool comp_as_int(double i, double j){	return (int(i)<int(j));}int main(){	double mydoubles[] = { 3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58 };	vector<double> v;	vector<double>::iterator it;	v.assign(mydoubles, mydoubles + 8);	cout << "use default comparison:" << endl;	stable_sort(v.begin(), v.end());	for (it = v.begin(); it != v.end(); it++)		cout << *it << " ";	cout << endl;	cout << "use selfdefined comparison function comp_as_int():" << endl;	v.assign(mydoubles, mydoubles + 8);	//stable sort 是稳定排序。	stable_sort(v.begin(), v.end(), comp_as_int);	for (it = v.begin(); it != v.end(); it++)		cout << *it << " ";	cout << endl;		cout << "use comparison function comp_as_int():" << endl;	v.assign(mydoubles, mydoubles + 8);	//sort是不稳定排序。	sort(v.begin(), v.end(), comp_as_int);	for (it = v.begin(); it != v.end(); it++)		cout << *it << " ";	cout << endl;	cout << "if it is not sorted with stable_sort(), the sequence of all elements between 1 and 2 will be set randomly..." << endl;	int n;	cin >> n;	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表