C++ STL sort()函数
structnode{intsize;intspeed;intindex;intlength;};nodearr[1001];boolcmp(constnode&n1,c...
struct node
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
然后在main()里面给 node arr[]数组(数组长度num)排序
sort(arr,arr+num,cmp);
总是会提示invalid operator < 然后就中断了
============================================
源程序如下:
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
int main()
{
int num=0;
while(scanf("%d%d",&arr[num].size,&arr[num].speed)!=EOF)
{
arr[num].index=num;
arr[num].length=1;
++num;
}
sort(arr,arr+num,cmp);
int loc=0;
for(int i=1;i<num;++i)
{
for(int j=0;j<i;++j)
{
if(arr[i].speed<arr[j].speed&&arr[i].size>arr[j].size&&arr[i].length<=arr[j].length)
{
arr[i].length=arr[j].length+1;
if(arr[loc].length<arr[i].length)
loc=i;
}
}
}
printf("%d\n",arr[loc].length);
}
那就奇怪了 我用的vs2005 逻辑判断出错 程序也不能崩溃啊
而且的确是运行sort()那句出现错误的呀~ 展开
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
然后在main()里面给 node arr[]数组(数组长度num)排序
sort(arr,arr+num,cmp);
总是会提示invalid operator < 然后就中断了
============================================
源程序如下:
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
int main()
{
int num=0;
while(scanf("%d%d",&arr[num].size,&arr[num].speed)!=EOF)
{
arr[num].index=num;
arr[num].length=1;
++num;
}
sort(arr,arr+num,cmp);
int loc=0;
for(int i=1;i<num;++i)
{
for(int j=0;j<i;++j)
{
if(arr[i].speed<arr[j].speed&&arr[i].size>arr[j].size&&arr[i].length<=arr[j].length)
{
arr[i].length=arr[j].length+1;
if(arr[loc].length<arr[i].length)
loc=i;
}
}
}
printf("%d\n",arr[loc].length);
}
那就奇怪了 我用的vs2005 逻辑判断出错 程序也不能崩溃啊
而且的确是运行sort()那句出现错误的呀~ 展开
2个回答
展开全部
你这部分没有问题
struct node
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
定义了谓词,是正确的,
而且程序也可以运行,我在vc6下测试的,
你有错误的地方是在下面的逻辑判断
for(int i=1;i<num;++i)
{
for(int j=0;j<i;++j)
{
if(arr[i].speed<arr[j].speed&&arr[i].size>arr[j].size&&arr[i].length<=arr[j].length)
{
arr[i].length=arr[j].length+1;
if(arr[loc].length<arr[i].length)
loc=i;
}
}
最后能出结果.
struct node
{
int size;
int speed;
int index;
int length;
};
node arr[1001];
bool cmp(const node &n1,const node &n2)
{
if(n1.size>n2.size)
return true;
else if(n1.speed>n2.speed)
return true;
else
return false;
}
定义了谓词,是正确的,
而且程序也可以运行,我在vc6下测试的,
你有错误的地方是在下面的逻辑判断
for(int i=1;i<num;++i)
{
for(int j=0;j<i;++j)
{
if(arr[i].speed<arr[j].speed&&arr[i].size>arr[j].size&&arr[i].length<=arr[j].length)
{
arr[i].length=arr[j].length+1;
if(arr[loc].length<arr[i].length)
loc=i;
}
}
最后能出结果.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询