C++中sort函数在algorithm头文件中,其默认是升序排序,但也可以自定义排序方式,如下:
//重点:自定义排序方式不能和main函数放在一起
bool cmp( int a, int b) { return a > b; }
bool myCmp(vector<int> a, vector<int>b) {
//a[1]表示根据第二列排序,a[0]表示根据第一列排序
return a[1] > b[1];
}
int main()
{
vector<int> size(5, 1);
vector<vector<int>> num(6, vector<int>(2)); //定义一个6*2的二维数组
num = { {8,1},{4,6},{1,5},{6,1},{5,0},{6,4} };
vector<int> a;
a.push_back(3);
a.push_back(9);
a.push_back(5);
a.insert(a.begin(), 6);
//一维数组排序
/*一般没有cmp这第三个参数,但为了修改排序方式可以自定义cmp*/
sort(a.begin(), a.end(),cmp);
for (int i = 0; i < a.size();i++) {
cout << a[i] << endl;
}
cout << endl;
//二维数组排序
sort(num.begin(), num.end(), myCmp);
for (int i = 0; i < num.size(); i++) {
for (int j = 0; j < num[i].size(); j++) {
cout << num[i][j] << " ";
}
cout << endl;
}
map和set这两个容器没有sort函数,但也可以实现排序,只不过是在插入容器之前就已经决定了排序的方式,他们使用仿函数的形式,如下:
//必须加一个const,不然会报错,且也应该写在main函数之外
class mycompare {
public:
bool operator() (int v1, int v2) const {
return v1 > v2;
}
};
struct cmp {
bool operator() (int v1, int v2)const {
return v1 > v2;
}
};
//set容器
void test() {
//默认升序排序
//set<int> s1;
//自定义排序方式,如降序
set<int, cmp> s1;
s1.insert(4);
s1.insert(3);
s1.insert(9);
s1.insert(1);
s1.insert(6);
//打印set元素
for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) {
cout << *it << " ";
}
if (s1.find(4) == s1.end()) {
cout << "not" << endl;
}
else {
cout << "yes" << endl;
}
cout << endl;
}