參考鏈結
題目描述輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為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是元素的起始位址,...