Sortowanie listy

0

Witam,
Zczytuje listę z pliku:
imie nazwisko zarobki wiek
Adam Nowak 1500 20
Jan Kowalski 2000 22
Anna Wójcik 1900 24
.
.
.
i muszę ją posortować: nazwiskiem, zarobkami lub wiekiem zależnie od wyboru opcji. na razie udało mi się jedynie zczytać plik i go wypisać.

  ifstream odczyt;
   odczyt.open("osoby",ios::in);

   while(!odczyt.eof())
   {
      string=new char[max_size];
      odczyt.getline(string,max_size,'\n');
      lista.push_back(string);
   }
    for(list<char*>::iterator it = lista.begin() ; it != lista.end() ; ++it)
      cout<<(*it)<<"\n";
  }
0

a nie możesz użyć algorytmów z algorithm? tam, jeśli się nie mylę, można sortować, np. vectory ;)

1

@kaśka Można posortować wektory ale będzie sortowalo wedlug imion, bo ich znaki są jako pierwsze.

@fiman Na twoim miejscu stworzyłbym strukturę gdzie będziesz przechowywał imiona, nazwiska, zarobki i wiek. Utworzyłbym wektor który przechowywałby to co wczytane z pliku a następnie posortował, bo wtedy byłoby łatwiej z tego względu, że sortujesz w taki sposób:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	struct osoba
	{
		string imie;
		string nazwisko;
		int wiek;
		int placa;
	} przyklad;

	vector<osoba> pracownicy;

	char choice;
	
	do
	{
		cin >> przyklad.imie;
		cin >> przyklad.nazwisko;
		cin >> przyklad.placa;
		cin >> przyklad.wiek;

		pracownicy.push_back(przyklad);

		cout << "Koniec?: ";
		cin >> choice;
	}while(choice != 'k');

	if(pracownicy[0].placa > pracownicy[1].placa)
		choice = false;
	else
		choice = true;
	for(int i = 0; i < 2; i++)
	{
		cout << pracownicy[choice].imie << "\t" << pracownicy[choice].nazwisko
			 << pracownicy[choice].placa << "\t" << pracownicy[choice].wiek << endl;

		choice = (!choice);
	}

	system("pause");
	return 0;
}

To jest sortowanie dla 2 osób, dla większej ilości będziesz musiał napisać swój algorytm, lub jak powiedziała Kaśka możesz skorzystać z tego co jest w bibliotece <algorithm>. Jeżeli chcesz swój algorytm napisać, to zainteresuj się algorytmem QuickSort

0

Tyle, że jak chcesz używać stlowego sorta, to robisz ifa, który wybierze według czego sortować i potem odpowiednio przeciążasz operator porównania.

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