C++ 将数据从文件读入结构,对数据进行排序并写入文件

C++ 将数据从文件读入结构,对数据进行排序并写入文件,c++,C++,我几乎什么都试过了。我只是想找些建议 该项目将从文件[“racers2011.txt”]中读取数据到一个结构中,并对雄性的比赛时间进行排序,对雌性的比赛时间进行排序。将雄性和雌性进行分组,并输出它们的等级和比赛时间,这是它们最好的蓝色种族和最好的红色种族的组合。我已读入该文件并将其输出到新文件,但无法确定如何对该文件进行排序 如果有人能帮我一点忙,我将不胜感激 以下是我到目前为止的代码(有些代码我没有编译,所以我已经注释掉了): #包括 #包括 #包括 使用名称空间std; 结构赛车手 { 国际

我几乎什么都试过了。我只是想找些建议

该项目将从文件[“racers2011.txt”]中读取数据到一个结构中,并对雄性的比赛时间进行排序,对雌性的比赛时间进行排序。将雄性和雌性进行分组,并输出它们的等级和比赛时间,这是它们最好的蓝色种族和最好的红色种族的组合。我已读入该文件并将其输出到新文件,但无法确定如何对该文件进行排序

如果有人能帮我一点忙,我将不胜感激

以下是我到目前为止的代码(有些代码我没有编译,所以我已经注释掉了):

#包括
#包括
#包括
使用名称空间std;
结构赛车手
{
国际围嘴;
性别;
char-fname[30];
字符名称[30];
双b1、b2、r1、r2;
};
布尔连接文件(ifstream和fin,字符填充[]);
bool connectOutFile(of stream&fout,char outfilename[]);
无效读取数据(ifstream和fin、赛车手结构赛车手[]、常数int和最大值);
//无效赛车手(ostream&fout,赛车手[],const int&MAX);
//双倍计算时间(Racer_struct racers[],双倍总计[],const int&MAX);
无效书面数据(ostream&fout、Racer_struct racers[],const int&MAX);
int main()
{
常数int MAX=38;
赛车手结构赛车手[MAX];
//双倍总计[最大值];
流鳍;
流式流量计;
char in_文件[30],out_文件[30];
布尔开了门;
字符标题[79];
打开=连接文件(fin,在_文件中);
cout>racers[i].r1>>racers[i].r2;
财务报表(ws);
}
}
/*
无效赛车手(ostream&fout,赛车手[],const int&MAX)
{
对于(int i=0;i赛车手[i].b2)
总[i]=赛车手[i]。r2+赛车手[i]。b2;
else if(racers[i].r2>racers[i].r1&&racers[i].b2>racers[i].b1)
总[i]=参赛选手[i]。r1+参赛选手[i]。b1;
else if(racers[i].r1>racers[i].r2&&racers[i].b2>racers[i].b1)
总[i]=参赛选手[i]。r2+参赛选手[i]。b1;
其他的
总[i]=赛车手[i]。b2+赛车手[i]。r1;
返回总数[i];
}
*/
无效写入数据(ostream&fout、Racer_struct racers[],const int&MAX)
{

对于(int i=0;i使用。多说会泄露,我想这是家庭作业。

使用。多说会泄露,我想这是家庭作业。

正如约翰·兹温克所说,你可能想用
std::sort
来进行排序。就个人而言,我会像约翰·兹温克那样重载
操作符>
操作符K说,您可能想使用<代码> STD::排序< /COD>进行排序。个人,我超载<代码>运算符> <代码> >代码>运算符>代码>代码>:STD::排序< <代码> >是一个非常有效的排序函数,是C++标准的一部分,在头<代码>算法< /代码> .<
<> >代码:损坏: >使用“迭代器”的概念。这是一个比较难的主题,所以我将粗略地概括一下。C++中的任何序列都可以表示为一对迭代器:一个指向第一个元素,第二个指向最后一个元素之后的一个点(所以,<代码> [开始,结束[< /代码> ])。。这在数组中很容易看到:对于大小为
N
的数组
a
a[N]
不是数组的一部分。数组的迭代器类型是指针

那么,让我们看看如何在您的案例中使用std::sort:

std::sort(racers, racers + MAX);
上面的一行可以理解为“按
racers
racers+MAX
分隔的顺序对元素进行排序”。对于数组,数组的名称指向第一个元素,并将大小添加到该地址,得到“end”迭代器(如上所述)。如果使用标准容器,如
std::vector
,则可以使用该向量的
begin()
end()
方法来获取适当的迭代器


< > >代码> STD::排序< /COD>使用比较函数比较每个元素,两个元素。默认情况下,是<代码> <> >代码>:STD::排序< /COD>是一个非常有效的排序函数,是C++标准的一部分,在头<代码>算法< /> >

<> >代码:损坏: >使用“迭代器”的概念。这是一个比较难的主题,所以我将粗略地概括一下。C++中的任何序列都可以表示为一对迭代器:一个指向第一个元素,第二个指向最后一个元素之后的一个点(所以,<代码> [开始,结束[< /代码> ])。。这在数组中很容易看到:对于大小为
N
的数组
a
a[N]
不是数组的一部分。数组的迭代器类型是指针

那么,让我们看看如何在您的案例中使用std::sort:

std::sort(racers, racers + MAX);
上面的一行可以理解为“按
racers
racers+MAX
分隔的顺序对元素进行排序”。对于数组,数组的名称指向第一个元素,并将大小添加到该地址,得到“end”迭代器(如上所述)。如果使用标准容器,如
std::vector
,则可以使用该向量的
begin()
end()
方法来获取适当的迭代器


现在,
std::sort
使用一个比较函数将每个元素逐个进行比较。默认情况下,这是
这是家庭作业,学期结束了,我需要这个来准备期末考试。“使用std::sort”老实说,这并没有多大帮助。你能不能再详细一点。如果你能看看我的代码,告诉我我的一些东西哪里出了问题。那太棒了。但是任何帮助都比没有帮助好,所以谢谢你。试着在代码中使用std::sort。这应该很简单,你只需传递一些参数就可以了nts来显示容器所在的位置,并为它提供一个进行比较的函数。如果您使用像clang(而不是g++)这样的好编译器,您应该能够通过文档和编译器的诊断来很好地对其进行排序。这不是更容易吗
std::sort(racers, racers + MAX);
// This should be defined after Racer_struct and before the first call to std::sort
bool operator<(const Racer_struct &left, const Racer_struct &right)
{
    // return true if left should get before right
}