對容器進行排序和排序

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::liststd::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 函式總是對整個列表進行排序,因此他們無法對子範圍的元素進行排序。但是,由於 listforward_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);
}