一般常见的sort()排序函数的形式是:
sort(vector.begin(),vector.end(),cmp)
前两个参数为排序的范围,第三个为函数指针,规定排序的规则,且第三个可以省略。注意包含#include <algorithm>
例子如下:
#include <iostream> // std::cout
#include <algorithm> // std::sort
#include <vector> // std::vector
using namespace std;
bool myfunction(int i, int j) { return (i < j); }//升序排列
bool myfunction2(int i, int j) { return (i > j); }//降序排列
bool myfunction3(pair<int, int> i, pair<int, int> j) { return (i.second > j.second); } // 按照pair的第二个元素 降序排列
int main() {
vector <pair<int, int >> tmp;
tmp.push_back(make_pair(1, 2));
tmp.push_back(make_pair(5, 4));
tmp.push_back(make_pair(6, 3));
tmp.push_back(make_pair(8, 5));
tmp.push_back(make_pair(9, 1));
sort(tmp.begin(), tmp.end(), myfunction3);
for (auto i : tmp) {
cout << i.first << " " << i.second << endl;
}
system("pause");
return 0;
}
剑指offer第32题:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
class Solution {
public:
//非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,
//因此无法再sort中调用非静态成员函数。
//静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,
//无须创建任何对象实例就可以访问。
//同时静态成员函数不可以调用类的非静态成员。
static bool cmp(int a,int b)
{
string A="";
string B="";
A+=to_string(a);
A+=to_string(b);
B+=to_string(b);
B+=to_string(a);
return (A<B);
}
string PrintMinNumber(vector<int> numbers)
{
sort(numbers.begin(),numbers.end(),cmp);
string C="";
for(int i=0;i<numbers.size();i++)
{
C+=to_string(numbers[i]);
}
return C;
}
};