сортировка массива и сопоставление другого массива и получение ошибки - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь написать программу, в которой я пишу информацию о таких людях, как: имя, минуты и секунды. Мне нужно отсортировать людей по времени.Я не могу понять, как сортировать минуты и не потерять другой порядок следования массивов - имя и секунда.они просто стоят на месте. Также я получаю ошибку, потому что что-то не так с сортировкой

#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 голосов
/ 17 июня 2019

std :: sort () ожидает два итератора в качестве параметров: первый - начальная позиция сортируемой последовательности, а второй - конечная позиция. Вот почему ваш код не компилируется.

Чтобы отсортировать массив, вы должны либо определить оператор <в вашем классе / структуре, либо предоставить функцию сравнения в качестве третьего параметра для sort (). </p>

Вы можете определить оператор <следующим образом в struct people: </p>

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);
...