文章目录
sort()
理论知识:sort()函数位于<algorithm>
头文件中,使用前需要include。
该函数使用快速排序(Quick Sort)算法实现,可以对 STL 【容器】中的元素进行排序。
主要以如下两种方式调用。
- sort(_RandomAccessIterator __first, _RandomAccessIterator __last) 简记为sort(first, last)
功能:对线性结构,[first, last) 区域内的元素做默认的升序排序。
排序条件:线性结构(如数组),支持*运算(表明first, last应是某种地址形式),支持<运算(一般结构体不支持单纯的 < 运算)。
应用时通常用xx.begin()和xx.end()代替first和last,所以在定义数据结构时,将其定义为vector更容易操作。
比较规则:默认比较规则是__iter_less_iter(),如下。
struct _Iter_less_iter
{
template<typename _Iterator1, typename _Iterator2>
_GLIBCXX14_CONSTEXPR
bool
operator()(_Iterator1 __it1, _Iterator2 __it2) const
{
return *__it1 < *__it2; }
};
且用vector时,该算法或许能处理高维的排序,如:(但还没弄清具体原理)。
int main() {
vector<vector<int>> b (3, vector<int>(2, 0));
b[0][1] = b[1][0] = b[1][1] = b[2][0] = 1;
for (int i = 0; i < 3; i++) {
cout << b[i][0] << "\t" << b[i][1] << endl;
}
sort(b.begin(), b.end());
cout << endl;
for (int i = 0; i < 3; i++) {
cout << b[i][0] << "\t" << b[i][1] << endl;
}
}
输出
0 1
1 1
1 0
0 1
1 0
1 1
- sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) 简记为sort(first, last, comp)
此种方法可以自定义比较函数comp,比较函数需要满足:
(1)接受两个参数,表示待比较的元素。
(2)返回一个bool类型的值,表示比较结果。
且如果comp(a, b)返回值为true,则a应该排在b之前;否则,b应该排在a之前。
简单定义一个降序比较函数:
bool cmp(int a, int b) {
return a > b; // 降序排列
}
甚至可以
sort(c.begin(), c.end(), [](int a, int b){
return a > b;});
先简单介绍到这里,日后有应用或是发现其他遗漏再补充。