C++ 在结构类型的数组上使用排序函数
C++ use sort function on a struct type of array
#include<bits/stdc++.h>
using namespace std;
ifstream f ("date.in");
ofstream g ("date.out");
int v[10001],maxi,i,maxi1,n,k,mini=INT_MAX,j;
struct interval
{
int stg,dr;
} x,a[10001];
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>x.stg>>x.dr;
a[i].stg=x.stg;
a[i].dr=x.dr;
v[x.stg]++;
v[x.dr]-=1;
if(maxi<x.dr)
maxi=x.dr;
}
for(i=1;i<=maxi;i++)
v[i]+=v[i-1];
for(i=1;i<=maxi;i++)
{
if(v[i]>maxi1)
maxi1=v[i];
}
g<<maxi1<<'\n';
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i].stg<a[j].stg)
{
swap(a[i].stg,a[j].stg);
swap(a[i].dr,a[j].dr);
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
if(a[i].dr<a[j].stg)
{
k++;
g<<a[i].stg<<" "<<a[i].dr;
g<<'\n';
i=j;
}
if(a[n].stg>a[k].dr)
{
g<<a[n].stg<<" "<<a[n].dr;
g<<'\n';
k++;
}
g<<k;
}
所以我的程序运行良好,但我想对其进行优化。我想使用排序函数(不是 qsort)而不是冒泡排序,就像这样排序(a+1,a+n+1,comp),但我不知道如何为这种情况编写 comp 函数。非常感谢您的帮助。
解决方案并不难:
bool cmp( interval a, interval b )
{
return (a.stg < b.stg && a.dr < b.dr);
}
#include<bits/stdc++.h>
using namespace std;
ifstream f ("date.in");
ofstream g ("date.out");
int v[10001],maxi,i,maxi1,n,k,mini=INT_MAX,j;
struct interval
{
int stg,dr;
} x,a[10001];
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>x.stg>>x.dr;
a[i].stg=x.stg;
a[i].dr=x.dr;
v[x.stg]++;
v[x.dr]-=1;
if(maxi<x.dr)
maxi=x.dr;
}
for(i=1;i<=maxi;i++)
v[i]+=v[i-1];
for(i=1;i<=maxi;i++)
{
if(v[i]>maxi1)
maxi1=v[i];
}
g<<maxi1<<'\n';
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i].stg<a[j].stg)
{
swap(a[i].stg,a[j].stg);
swap(a[i].dr,a[j].dr);
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
if(a[i].dr<a[j].stg)
{
k++;
g<<a[i].stg<<" "<<a[i].dr;
g<<'\n';
i=j;
}
if(a[n].stg>a[k].dr)
{
g<<a[n].stg<<" "<<a[n].dr;
g<<'\n';
k++;
}
g<<k;
}
所以我的程序运行良好,但我想对其进行优化。我想使用排序函数(不是 qsort)而不是冒泡排序,就像这样排序(a+1,a+n+1,comp),但我不知道如何为这种情况编写 comp 函数。非常感谢您的帮助。
解决方案并不难:
bool cmp( interval a, interval b )
{
return (a.stg < b.stg && a.dr < b.dr);
}