Bootstrap

C++的 sort 函数实现按照指定维排序

头文件<algorithm>

sort函数默认可以实现顺序容器的从小到大排序,那么从大到小呢,若容器为二维容器,那么还能使用sort排序吗?

1. 默认从小到大排序

vector<int> vec;
//赋值
//
//...
sort(vec.begin(),vec.end());

2. 从大到小排序,把里面的a>b改为a<b就实现从小到大

//定义一个模板函数,也可以只定义函数,T和要排序的数组里的元素类型
template<T>
bool cmp(T a,T b)
{
    //这样就可以实现从大到小排序了
    return a>b;
}

int main()
{
    vector<int> vec;
    //赋值
    //
    //...
    //后面加上cmp参数
    sort(vec.begin(),vec.end(),cmp);
}

3. 若待排序数组为一个二维数组

int main()
{
    vector<vector<int> > vec;
    //赋值
    //
    //...
    //后面加上cmp参数
    sort(vec.begin(),vec.end());
}

默认按照第一维进行从小到大排序

 如[[1,2],[0,3]]→sort(vec.begin(),vec.end());→[[0,3],[1,2]]

4. 按照第二维从大到小排序

//就不能使用模板了
bool cmp(vector<int> a,vector<int> b)
{
    return a[1]>b[1];
}

int main()
{
    vector<vector<int> > vec;
    //赋值
    //
    //...
    //后面加上cmp参数
    sort(vec.begin(),vec.end(),cmp);
}

如[[1,2],[0,3]]→→[[0,3],[1,2]]       第二维从大到小(3>2)。

end

 

 

 

 

 

 

;