C++ stable_sort()用法詳解


轉載 http://c.biancheng.net/view/7460.htm

通過閱讀《 C++ sort()排序函數》一節,讀者已經了解了 sort() 函數的功能和用法。值得一提的是,當指定范圍內包含多個相等的元素時,sort() 排序函數無法保證不改變它們的相對位置。那么,如果既要完成排序又要保證相等元素的相對位置,該怎么辦呢?可以使用 stable_sort() 函數。

table_sort() 函數的用法也有 2 種,其語法格式和 sort() 函數完全相同(僅函數名不同):
//對 [first, last) 區域內的元素做默認的升序排序
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
//按照指定的 comp 排序規則,對 [first, last) 區域內的元素進行排序
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
其中,first 和 last 都為隨機訪問迭代器,它們的組合 [first, last) 用來指定要排序的目標區域;另外在第 2 種格式中,comp 可以是 C++ STL 標准庫提供的排序規則(比如 std::greater<T>),也可以是自定義的排序規則。

舉個例子:
#include <iostream> // std::cout
#include <algorithm> // std::stable_sort
#include <vector> // std::vector
//以普通函數的方式實現自定義排序規則
bool mycomp(int i, int j) {
return (i < j);
}
//以函數對象的方式實現自定義排序規則
class mycomp2 {
public:
bool operator() (int i, int j) {
return (i < j);
}
};
int main() {
std::vector<int> myvector{ 32, 71, 12, 45, 26, 80, 53, 33 };
//調用第一種語法格式,對 32、71、12、45 進行排序
std::stable_sort(myvector.begin(), myvector.begin() + 4); //(12 32 45 71) 26 80 53 33
//調用第二種語法格式,利用STL標准庫提供的其它比較規則(比如 greater<T>)進行排序
std::stable_sort(myvector.begin(), myvector.begin() + 4, std::greater<int>()); //(71 45 32 12) 26 80 53 33
//調用第二種語法格式,通過自定義比較規則進行排序,這里也可以換成 mycomp2()
std::stable_sort(myvector.begin(), myvector.end(), mycomp);//12 26 32 33 45 53 71 80
//輸出 myvector 容器中的元素
for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
std::cout << *it << ' ';
}
return 0;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM