Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z funkcją sort()

Ostatnio zmodyfikowano 2011-01-07 21:03
Autor Wiadomość
kasprus
Temat założony przez niniejszego użytkownika
Problem z funkcją sort()
» 2011-01-07 20:15:45
Witam!
Mam taki mały problem.
Otóż chcę posortować tablicę struktur według jednego elementu za pomocą wbudowanej funkcji sort(), jednak mój program nie robi tego poprawnie.
Oto mój kod:

C/C++
#include<iostream>
#include<algorithm>
using namespace std;
struct odcinek {
    int a;
    int b;
};
bool cmp( odcinek a, odcinek b ) {
    return a.a > b.b;
}
int main() {
    odcinek tab[ 1000 ];
    int a;
    cin >> a;
    int b = 0;
    while( b < a ) {
        cin >> tab[ b ].a >> tab[ b ].b;
        b++;
    }
    b = 0;
    sort( tab, tab + a, cmp );
    while( b < a ) {
        cout << tab[ b ].a << " " << tab[ b ].b << endl;
        b++;
    }
    system( "pause" );
    return 0;
}
Nie wyświetla dobrze linijek wczytywania liczb:(.
P-26297
ison
» 2011-01-07 20:36:01
nie lepiej użyć fora zamiast wydziwiać z whilem?
for( int i = 0; i < a; ++i )

chciałbyś posortować strukturę ale według jakiej zmiennej?
jeśli chcesz sortować według zmiennej 'a' to:
C/C++
bool cmp( odcinek a, odcinek b ) {
    return a.a > b.a;
}
P-26298
kasprus
Temat założony przez niniejszego użytkownika
» 2011-01-07 20:47:35
Niestety dalej nie działa. Wynik po wczytaniu=wynik przed wczytaniem.
P-26299
ison
» 2011-01-07 20:54:51
to zmień kompilator :p

C/C++
#include<iostream>
#include<algorithm>
#include <cstdlib>

using namespace std;

struct odcinek {
    int a;
    int b;
};

bool cmp( odcinek a, odcinek b ) {
    return a.a > b.a;
}

int main() {
    odcinek tab[ 1000 ];
    int a;
    cin >> a;
    int b = 0;
    while( b < a ) {
        cin >> tab[ b ].a >> tab[ b ].b;
        b++;
    }
    b = 0;
    sort( tab, tab + a, cmp );
    while( b < a ) {
        cout << tab[ b ].a << " " << tab[ b ].b << endl;
        b++;
    }
    system( "pause" );
    return 0;
}

już pomijając sam fakt że cstdliba Ci brakowało (do funkcji system)

input:
4
5 9
3 8
6 7
2 7
output:
6 7
5 9
3 8
2 7
Aby kontynuować, naciśnij dowolny klawisz . . .
P-26300
kasprus
Temat założony przez niniejszego użytkownika
» 2011-01-07 21:03:47
Wielkie dzięki. Teraz już wszystko działa.
P-26301
« 1 »
  Strona 1 z 1