Sortowanie struktury wg wieku

0

Witam, mam problem z takim prostym zadaniem, a mianowicie "Rozwiń program z zadania 3 o funkcję sortującą wszystkie osoby w tablicy wg wieku." Oto mój kod:

#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;
}

Widzę, że to po prostu sortuje sam wiek, a resztę danych wypisuje tak jak była pierwotnie wpisana, lecz nie wiem jak to zmienić.
Z góry dziękuję za pomoc ;)

0

temp = tab[j].wiek; tab[j].wiek = tab[j + 1].wiek; tab[j + 1].wiek = temp;
swapujesz tu przecież tylko wiek, reszte danych zostawiasz. Zrób z tego osobną funkjcę void swap (Osoba &, Osoba &) i swapuj całą strukture. Swoją drogą, jeśli przekazujesz jeden argument do funkcji (nie tablicę), to przekazuj to przez referencje, nie przez wskaźnik.

0

@Skipper11, zapoznaj się ze standardowymi funkcjami: sort i qsort.

0

Okej, działa w końcu. Dzięki ;)
A co do funkcji sort i qsort to mamy na I semestrze sami je pisać.

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