對容器進行排序和排序
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);
}