STL stable_sort排序演算法
阿新 • • 發佈:2018-12-12
sort() 演算法可能會改變相等元素的順序,有時候這不是我們想要的。假設有一個儲存某種事務的容器,或許是銀行賬戶。進一步假設,在處理它們之前,為了能夠有序更新這些賬戶,需要按照賬號對這些事務排序。如果出現相等事務的順序反映的是它們新增到容器的時間順序,就需要維持這個順序不變。如果允許對給定賬戶的事務進行重新排列,可能會出現透支的情況。
這種情況下,stable_sort() 演算法可以滿足我們的要求,它會對一段元素進行排序並保證維持相等元素的原始順這裡有兩個版本:其中一個接受兩個用來指定排序元素範圍的迭代器,另一個接受用於比較的額外引數。
為了演示 stable_sort() 的使用,可以對上一節中的 names 容器進行排序的語句進行修改:
std::stable_sort(std::begin(names), std::end(names),[](const Name& name1, const Name& name2) { return name1.get_second() < name2.get_second(); });
當然,上一節中使用 sort() 的輸出並沒有打亂相等元素的順序,所以使用 stable_sort() 並不會改變相同輸入的輸出。它們的不同之處在於,stable_sort() 保證不會改變相等元素的順序,這是 sort() 演算法所不能保證的。當需要使相等元素的順序保持不變時,應該使用 stable_sort()。