在C++中的标准函数库中,为我们提供了一个比较函数sort(),排序原理是快排。函数原型是:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
其中的第一个参数是排序的开始位置,第二个参数是排序的终止位置,第三个参数是排序的类型。如果不给出第三个参数的话,则默认是升序。然后仅仅只有升序显然不能满足我们做题目的需要,我们可以自定义比较函数或者利用Lambda表达式来进一步利用这个函数,而这两种方法又可以替换使用。
1:lambda表达式:
vector<int> aa = { 1,3,5,6,2,4,8};
sort(aa.begin(), aa.end(), [](int n1, int n2) {return n1 > n2; });
2:与lambda表达式相对应的直接函数比较的写法:
vector<int> aa = { 1,3,5,6,2,4,8};
static bool cmp1(int a, int b) {
return a > b;
}
static auto cmp2 = [](int a, int b) {
return a > b;
};
sort(aa.begin(), aa.end(), cmp1);
sort(aa.begin(), aa.end(), cmp2);
然后下面记录一下我今天写题遇到的一个用字符串来比较长度(优先级高)和比较字符串的顺序(优先级低一点)的两者的相互转化;
static auto cmp(string& a,string& b){
if(a.length() == b.length()) return a < b;
return a.length() > b.length();
};
sort(dictionary.begin(),dictionary.end(),cmp);
sort(dictionary.begin(),dictionary.end(),[](string& a,string& b) //[]叫做导入器
{
if(a.length() == b.length()) return a < b;
return a.length() > b.length();
});