STL stable_sort排序

STL stable_sort排序算法

C++ STL 中的 stable_sort() 函数完全可以看作是 sort() 函数在功能方面的升级版。换句话说,stable_sort() 和 sort() 具有相同的使用场景,就连语法格式也是相同的,只不过前者在功能上除了可以实现排序,还可以保证不改变相等元素的相对位置。

有些场景是需要保证相等元素的相对位置的。例如对于一个保存某种事务(比如银行账户)的容器,在处理这些事务之前,为了能够有序更新这些账户,需要按照账号对它们进行排序。而这时就很有可能出现相等的账号(即同一账号在某段时间做多次的存取钱操作),它们的相对顺序意味着添加到容器的时间顺序,此顺序不能修改,否则很可能出现账户透支的情况。

STL stable_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函数排序

使用 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,如下图所示:

02_STL stable_sort排序算法.png

可以看到,我们使用了 stable_sort 实现了排序

STL stable_sort函数总结

C++ STL 中的 stable_sort() 函数完全可以看作是 sort() 函数在功能方面的升级版。换句话说,stable_sort() 和 sort() 具有相同的使用场景,就连语法格式也是相同的,只不过前者在功能上除了可以实现排序,还可以保证不改变相等元素的相对位置。