sort 函數(shù)利用自定義比較函數(shù)實(shí)現(xiàn)定制排序:編寫(xiě)比較函數(shù):指定排序規(guī)則,定義參數(shù)類型和返回值。調(diào)用 sort 函數(shù):將自定義比較函數(shù)作為第三個(gè)參數(shù),對(duì)容器中的元素進(jìn)行排序。示例:按降序?qū)φ麛?shù)排序,按自定義規(guī)則對(duì)字符串排序(空字符串優(yōu)先、長(zhǎng)度優(yōu)先、字典序優(yōu)先)。
如何在 C++ 中使用 sort 函數(shù)實(shí)現(xiàn)定制排序功能
sort
函數(shù)是 C++ 標(biāo)準(zhǔn)庫(kù)中的一個(gè)重要函數(shù),用于對(duì)容器中的元素進(jìn)行排序。它以引用方式接收一個(gè)比較函數(shù),允許用戶根據(jù)自定義條件對(duì)元素進(jìn)行排序。
比較函數(shù)的語(yǔ)法
比較函數(shù)的語(yǔ)法如下:
bool compare(const T1& a, const T2& b);
其中:
-
T1
和T2
是要比較的元素類型。 - 返回
true
表示a
小于b
。 - 返回
false
表示a
大于或等于b
。
實(shí)現(xiàn)定制排序
要使用 sort
函數(shù)實(shí)現(xiàn)定制排序,您需要編寫(xiě)一個(gè)指定排序行為的自定義比較函數(shù)。以下是一個(gè)示例:
#include <algorithm> #include <vector> using namespace std; bool compareIntsDescending(int a, int b) { return a > b; } int main() { vector<int> numbers = {1, 5, 2, 4, 3}; sort(numbers.begin(), numbers.end(), compareIntsDescending); for (auto& num : numbers) { cout << num << " "; } cout << endl; return 0; }
這個(gè)程序的輸出:
5 4 3 2 1
在這個(gè)例子中,compareIntsDescending
比較函數(shù)將整數(shù)從大到小進(jìn)行排序。
實(shí)戰(zhàn)案例:按自定義規(guī)則對(duì)字符串排序
假設(shè)您有一個(gè)字符串?dāng)?shù)組,您希望按以下規(guī)則對(duì)其進(jìn)行排序:
- 空字符串先排序。
- 較長(zhǎng)的字符串先排序(長(zhǎng)度相同時(shí)按字母順序排序)。
您可以編寫(xiě)以下比較函數(shù)來(lái)實(shí)現(xiàn)此功能:
bool compareStrings(string a, string b) { // 檢查是否為空字符串 if (a.empty() && !b.empty()) { return true; } else if (!a.empty() && b.empty()) { return false; } // 空字符串相等 if (a.empty() && b.empty()) { return false; } // 比較長(zhǎng)度 if (a.length() < b.length()) { return true; } else if (a.length() > b.length()) { return false; } // 長(zhǎng)度相同時(shí)按字母順序比較 return (a < b); }
然后,您可以使用此比較函數(shù)對(duì)字符串?dāng)?shù)組進(jìn)行排序,如下所示:
#include <algorithm> #include <vector> using namespace std; int main() { vector<string> strings = {"apple", "banana", "cherry", "dog", "cat", ""}; sort(strings.begin(), strings.end(), compareStrings); for (auto& str : strings) { cout << str << " "; } cout << endl; return 0; }
這個(gè)程序的輸出:
dog cat apple banana cherry
以上就是如何正確使用C++sort函數(shù)實(shí)現(xiàn)定制排序功能的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注愛(ài)掏網(wǎng) - it200.com其它相關(guān)文章!