我正在尝试编写一个程序,在其中编写诸如姓名,分钟和秒钟之类的人的信息。我需要按时间对人进行排序。我不明白如何对分钟进行排序,也不会丢失其他数组序列的订单名称和秒数。他们只是站在那里。我也出错了,因为排序出错了
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct people{
string name;
int min;
int sec;
};
int main()
{
int temp;
struct people z[6];
for(int i=0; i<6; i++)
{
cin>>z[i].name;
cin>>z[i].min;
cin>>z[i].sec;
}
sort(z.min,z.min +6);
cout<<endl;
for(int i=0; i<6; i++)
{
cout<<z[i].name<<" "<<z[i].min<<" "<<z[i].sec<<endl;
}
return 0;
}
I am getting this error:
error: request for member 'min' in 'z', which is of non-class type 'people [6]'
答案 0 :(得分:0)
std :: sort()需要两个迭代器作为参数-第一个是要排序的序列的初始位置,第二个是最终位置。这就是为什么您的代码无法编译的原因。
要对数组进行排序,您必须在类/结构中定义一个运算符<,或者将比较函数作为sort()的第三个参数。
您可以在结构体人员中定义运算符<:
bool operator < (const people &p)
{
return min < p.min;
}
并按如下所示进行呼叫和校准排序:
sort(z, z + 6);
或者,您可以按以下方式定义函数comp(在struct people定义之后):
bool comp(const people &p1, const people &p2) { return (p1.min < p2.min); }
并像这样调用sort():
sort(z, z + 6, comp);