排序数组并匹配其他数组并得到错误

时间:2019-06-16 20:30:21

标签: c++ sorting compiler-errors

我正在尝试编写一个程序,在其中编写诸如姓名,分钟和秒钟之类的人的信息。我需要按时间对人进行排序。我不明白如何对分钟进行排序,也不会丢失其他数组序列的订单名称和秒数。他们只是站在那里。我也出错了,因为排序出错了

#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]'

1 个答案:

答案 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);