想要利用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;
}
输出结果如下: