vector<vector> 排序

想要利用sort函数实现一组不同长度的vector的排序,由大到小

static bool cmp(const vector<int>& A, const vector<int>& B)
{
    int min;
    if (A.size() <= B.size())
        min = A.size();
    else
        min = B.size();
    int i = 0;
    for (i; i < min; i++)
    {
        if (A[i] != B[i])
        {
            return A[i] > B[i];
        }
        
    }
    
}

但编译器报错invalid comparator

你这个cmp在哪里调用呢?
vector的sort函数调用的比较函数,参数应该是vector的元素类型,不是vector
你这个编译器报错指向哪一行?
函数也有问题,如果A和B的前min个元素值都相等,你这函数就不执行return语句啦
所以在for循环后面应该还要加上一个return false;表明A比B小

你的代码没问题啊,测试代码如下:
你用的什么编译器?需要注意的是,在声明

vector<vector<int> > vv; //注意vector<int>和>之间的空格

变量的时候,> 和>之间加个空格。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

static bool cmp(const vector<int>& A, const vector<int>& B)
{
    int min;
    if (A.size() <= B.size())
        min = A.size();
    else
        min = B.size();
    int i = 0;
    for (i; i < min; i++)
    {
        if (A[i] != B[i])
        {
            return A[i] > B[i];
        }

    }

}

int main()
{
    vector<vector<int> > vv;
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    vector<int> v2;
    v2.push_back(1);
    v2.push_back(3);

    vector<int> v3;
    v3.push_back(2);
    v3.push_back(3);

    vv.push_back(v1);
    vv.push_back(v2);
    vv.push_back(v3);
    sort(vv.begin(),vv.end(),cmp);

    for (int i=0;i<vv.size();i++)
    {
        vector<int> vt = vv.at(i);
        for (int j=0;j<vt.size();j++)
        {
            printf("%d ",vt.at(j));
        }
        printf("\n");
    }
    return 0;
}

输出结果如下:

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632