avatar
fireworks99
keep hungry keep foolish

stable_sort稳定排序

stable_sort稳定的排序

sortstable_sort 区别:

stable_sort(另外还有stable_partition)可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一模一样的元素。

#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(string a, string b)
{
    return a.length() < b.length();
}

int main()
{
    string s[5];
    s[0] = "fireworks";
    s[1] = "algorithm";
    s[2] = "iostreamm";
    s[3] = "stringcpy";
    s[4] = "111111111";
    stable_sort(s, s + 5, cmp);
    for(int i = 0; i < 5; ++i)
        cout << s[i] << '\n';
///结果
///fireworks
///algorithm
///iostreamm
///stringcpy
///111111111
    cout << '\n';

    sort(s, s + 5);
    for(int i = 0; i < 5; ++i)
        cout << s[i] << '\n';
///结果
///111111111
///algorithm
///fireworks
///iostreamm
///stringcpy
    return 0;
}

五个string在长度(length)方面相等,在stable_sort后相对位置没变,在sort后位置变了,就酱……

Site by Baole Zhao | Powered by Hexo | theme PreciousJoy