Sortowanie struktur

0

Witam, mam problem dotyczący mojego programu
Mianowicie mam podać 5 użytkowników, a następnie ma ich posortować według wieku
Niestety sortuje mi jedynie wiek, a resztę wypisuje normalnie. Nie wiem jak pozbyć się tego błędu.

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>

using namespace std;

struct Osoba
{
    string nazwisko;
    string imie;
    int wiek;
    int waga;
    int wzrost;

};

void wypisz(Osoba *os)
{
    cout << "Nazwisko: " << os->nazwisko << endl;
    cout << "Imie: " << os->imie << endl;
    cout << "Wiek: " << os->wiek << endl;
    cout << "Waga: " << os->waga << endl;
    cout << "Wzrost: " << os->wzrost << endl;
}

void wczytaj(Osoba *os)
{
    cout << "Podaj nazwisko: "; cin >> os->nazwisko;
    cout << "Podaj imie: "; cin >> os->imie;
    cout << "Podaj wiek: "; cin >> os->wiek;
    cout << "Podaj wage: "; cin >> os->waga;
    cout << "Podaj wzrost: "; cin >> os->wzrost;
}

void sortuj(Osoba *tab)
{
    {
        int temp=0;
        for (int i = 0; i < 5; i++)
            for (int j = 0; j<5 - i - 1; j++) 
                if (tab[j].wiek>tab[j + 1].wiek)
                {
                    temp = tab[j].wiek;
                    tab[j].wiek = tab[j + 1].wiek;
                    tab[j + 1].wiek = temp;
                }
    }
}

int main()
{
    Osoba tab[5];
    for (int i = 0; i < 5; i++)
    {
        wczytaj(&tab[i]);
    }
    cout << endl;
    cout << "Dane wypisane na ekranie wg wieku: " << endl;
    sortuj(tab);

    for (int i = 0; i < 5; i++)
    {
        wypisz(&tab[i]);
    }

    system("pause");
    return 0;
}
1

Problem taki, że robisz swap tylko wieku, przez to dochodzi do (uproszczonej) takiej sytuacji:

Input:

Kazik, 35
Basia, 21

Output:

Kazik, 21
Basia, 35

Powinieneś swapować wszystkie membery, nie tylko wiek:

if (tab[j].wiek>tab[j + 1].wiek)
{
        std::swap(tab[j], tab[j + 1]);
}
0

Muszę jeszcze poczytać więcej o funkcji sort i strukturach.
Bardzo dziękuję za błyskawiczną odpowiedź mimo późnej pory:)
Pozdrawiam

2

Zamiast sortować samemu, do tego bąbelkowo, użyj std::sort:

#include <algorithm>
#include <iostream>
#include <vector>

struct Person {
    std::string name;
    unsigned age;
};

int main() {
    std::vector<Person> people {
        {"John", 25},
        {"Stacy", 12},
        {"Rob", 33},
    };
    std::sort(std::begin(people), std::end(people), []( const auto& lhs, const auto& rhs ) {
        return lhs.age < rhs.age;
    });
    for(auto& p: people) {
        std::cout << p.name << " " << p.age << std::endl;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1