要使用此函数只需用 #include < algorithm>, sort()即可使用,语法描述为:
sort(begin,end),表示一个范围,例如:
string s[21];
for(int i=0;i <20;i++)
cin>>s[i];
sort(s,s+20);
输出结果将是把数组s按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).
假如说要实现这么一个功能:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string ret;
if(numbers.empty())
return ret;
vector<string> p;
for(int i = 0; i < numbers.size(); i++){
p.push_back(to_string(numbers[i]));
}
sort(p.begin(), p.end(), cmp);
for(int i = 0; i < numbers.size(); i++){
ret += p[i];
}
return ret;
}
static bool cmp(string a, string b){ //这儿的static不要忘!
string aa = a + b;
string bb = b + a;
return aa < bb;
}
};
上面的程序也可以这么来实现:
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string ret;
if(numbers.empty())
return ret;
string *p = new string[numbers.size()]; //申请一个大小为numbers.size()的string数组空间;
for(int i = 0; i < numbers.size(); i++){
p[i] = to_string(numbers[i]);
}
sort(p, p + numbers.size(), cmp);
for(int i = 0; i < numbers.size(); i++){
ret += p[i];
}
return ret;
}
static bool cmp(string a, string b){ //这儿的static不要忘!
string aa = a + b;
string bb = b + a;
return aa < bb;
}
};
还可以对string内的字符进行排序:
string a;
sort(a.begin(),a.end());
bool rule(char a,char b){
return a>b;
}
string a;
sort(a.begin(), a.end(), rule);
参考:https://zhidao.baidu.com/question/2206325432076996388.html