如何自定義sort函式中的比較函式

2021-08-30 21:46:41 字數 1374 閱讀 7835

參考鏈結

題目描述

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

思路:自定義比較器,若a+b>b+a則a>b,即」3」+」23」>」23」+」3」則3>23,並且我們希望在排序的時候將23排在3的前面,也就是公升序排列。

class solution 

string printminnumber(vectornumbers)

sort(num2str.begin(), num2str.end(), compare);

for(int i = 0; i < num2str.size(); i++)

return result;

}};

這道題的解法中用到了自定義比較器。也就是自定義了campare函式。

但是為什麼當ab// std::cout

#include // std::sort

#include // std::vector

bool myfunction (int i,int j) 可以看到comp的定義:comp函式返回乙個bool型別的值,這個值表示了在嚴格弱排序中(可以理解為公升序排序)第一引數是否位於第二個引數之前。

也就是說如果comp返回true,則第乙個引數小於第二個引數,sort根據compare的返回值將第乙個引數排在第二個引數之前。

如果comp返回false,則第乙個引數大於第二個引數,sort根據compare的返回值將第乙個引數排在第二個引數之後。

傳入a,b,定義bool myfunction (int i,int j) ,作為comp函式,

傳入ab,返回false,則排列為ba,

傳入ba,返回true,排列為ba。

是降序排列的。

回到最初的問題中:

static bool compare(const string& s1, const string& s2)

我們可以看出 如果s1=」3」, s2=」23」

ab = 「323」;

ba = 「233」;

事實上ab>ba,所以comp會返回false,sort根據compare返回的false將s2排列在s1之前,也就是排列成」23」,」3」這也就是我們想要的結果。

總結起來就是:

sort函式根據comp函式的返回值,對comp函式的兩個引數排序。

如果comp返回true,排序為「引數1」「引數2」,否則排序為「引數2」「引數1」。

想要公升序排列,則return parameter1parameter2

sort自定義cmp函式

include include include using namespace std bool comp const int a,const int b int main 執行結果 233 113 23 13 3 請按任意鍵繼續 什麼會這樣呢?比較時sort函式根據comp函式進行判斷輸的大小,系...

3 sort函式如何自定義排序函式

主要總結形如sort函式如何自定義排序函式的問題。目前發現有四種方法 1 排序物件自定義 運算子的過載函式,即 bool operator const type b return true or false 2 自定義排序函式,保證形參返回值即可 bool nameisnotimportant co...

sort自定義排序

1.sort介紹 用於c 中,對給定區間所有元素進行排序。使用的排序方法類似於快排的方法,時間複雜度為n log2 n 執行效率較高 標頭檔案 include algorithm 2.sort使用方法 sort函式有3個引數,sort first,last,cmp 其中,first是元素的起始位址,...