C++ STL 中的 stable_sort() 函数完全可以看作是 sort() 函数在功能方面的升级版。换句话说,stable_sort() 和 sort() 具有相同的使用场景,就连语法格式也是相同的,只不过前者在功能上除了可以实现排序,还可以保证不改变相等元素的相对位置。
有些场景是需要保证相等元素的相对位置的。例如对于一个保存某种事务(比如银行账户)的容器,在处理这些事务之前,为了能够有序更新这些账户,需要按照账号对它们进行排序。而这时就很有可能出现相等的账号(即同一账号在某段时间做多次的存取钱操作),它们的相对顺序意味着添加到容器的时间顺序,此顺序不能修改,否则很可能出现账户透支的情况。
#include <algorithm>
//对 [first, last) 区域内的元素做默认的升序排序
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
//按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
参数 | 描述 |
---|---|
first | 随机访问迭代器 |
last | 随机访问迭代器 |
其中,first 和 last 都为随机访问迭代器,它们的组合 [first, last) 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater<T>
),也可以是自定义的排序规则。
使用 STL stable_sort 函数实现排序
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool mycomp(int i, int j)
{
return (i < j);
}
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
vector<int> myvector{ 11, 22, 10, 100, 23, 89, 1024 };
stable_sort(myvector.begin(), myvector.begin() + 4);
stable_sort(myvector.begin(), myvector.begin() + 4, greater<int>());
stable_sort(myvector.begin(), myvector.end(), mycomp);
for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it)
{
cout << *it << ' ';
}
cout << endl;
return 0;
}
我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ stable_sort.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
可以看到,我们使用了 stable_sort 实现了排序
C++ STL 中的 stable_sort() 函数完全可以看作是 sort() 函数在功能方面的升级版。换句话说,stable_sort() 和 sort() 具有相同的使用场景,就连语法格式也是相同的,只不过前者在功能上除了可以实现排序,还可以保证不改变相等元素的相对位置。