对容器进行排序和排序
std::sort
,在标准库头文件 algorithm
中找到,是一种标准库算法,用于对由一对迭代器定义的值范围进行排序。std::sort
作为函数用于比较两个值的最后一个参数; 这就是决定订单的方式。请注意,std::sort
不稳定 。
比较函数必须对元素施加严格的弱排序 。一个简单的小于(或大于)的比较就足够了。
可以使用 std::sort
算法对具有随机访问迭代器的容器进行排序:
Version >= C++ 11
#include <vector>
#include <algorithm>
std::vector<int> MyVector = {3, 1, 2}
//Default comparison of <
std::sort(MyVector.begin(), MyVector.end());
std::sort
要求其迭代器是随机访问迭代器。序列容器 std::list
和 std::forward_list
(需要 C++ 11)不提供随机访问迭代器,因此它们不能与 std::sort
一起使用。但是,它们确实具有 sort
成员函数,这些函数实现了与其自己的迭代器类型一起使用的排序算法。
Version >= C++ 11
#include <list>
#include <algorithm>
std::list<int> MyList = {3, 1, 2}
//Default comparison of <
//Whole list only.
MyList.sort();
他们的成员 sort
函数总是对整个列表进行排序,因此他们无法对子范围的元素进行排序。但是,由于 list
和 forward_list
具有快速拼接操作,你可以从列表中提取要排序的元素,对它们进行排序,然后将它们放回到它们非常有效的位置:
void sort_sublist(std::list<int>& mylist, std::list<int>::const_iterator start, std::list<int>::const_iterator end) {
//extract and sort half-open sub range denoted by start and end iterator
std::list<int> tmp;
tmp.splice(tmp.begin(), list, start, end);
tmp.sort();
//re-insert range at the point we extracted it from
list.splice(end, tmp);
}