Есть ли решение ошибки сортировки массива пользовательского ввода с помощью STL? - PullRequest
1 голос
/ 28 мая 2020

Мой код:

#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;

struct Interval
{
    int init,last;
};
bool compare(Interval a,Interval b)
{
    return (a.init < b.init);
}

int main()
{
        int t,i,j;
        int a[1000];
        cin >> t;
        for( j=0;j<t;++j){
          for(i=0;i<t;i++)
          {
               cin >> a[i];        
          }   
       } 
       sort(a,a+t,compare);
       for( j=0;j<t;++j)
       for(i=0;i<t;i++) 
       {
          cout<<a[i]<<" ";

       }
       cout<<"\n";
       return 0;
}

Каково решение в строке ниже?

sort(a,a+t,compare);

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Проблема здесь

bool compare(Interval a,Interval b)
{
    return (a.init < b.init);
}

compare сравнивает Interval объекты

Но

    int a[1000];
    sort(a,a+t,compare);

вы пытаетесь отсортировать массив int .

Либо отсортируйте массив int, либо массив Interval, но будьте последовательны. Функция compare должна соответствовать сортируемому массиву.

0 голосов
/ 28 мая 2020

Вы пытаетесь отсортировать int a[1000];, который является массивом int, а не массивом Interval. Если это действительно ваше намерение, то вам не нужен предикат (compare функция) для сортировки. Вы можете просто использовать operator< по умолчанию, предусмотренное для int. Это означает, что ваш код может быть просто:

std::sort(std::begin(a), std::begin(a) + t);
...