Siema. Potrzebuję pomocy. Otóż kod poniżej przedstawia program, którego zadaniem jest wczytanie z pliku wierszy do listy a następnie do kolejki, czyli chodzi tu o kolejkę priorytetową list. Moim poprzednim zadaniem była lista kolejek priorytetowych, dlatego teraz przerabiam na kolejkę. I w sumie nie wiem czy dobrze to robię... Mam kilka problemów.... W " typedef'ach" nie potrafię zastosować predykatów na sortowanie . Zadaniem jest posortowanie najpierw list gdzie wiersz zawiera więcej niż 6 słów alfabetycznie rosnąco w pp malejąco. Później posortowanie kolejki pod względem wielkości list , nie ważne czy malejąco czy rosnąco. Od tego jest predykat mojeGreater2 lecz nie potrafię go użyć. Moje pytanie czy w tym przypadku można użyć predykatów w typedefach? Jeśli tak to jak? W klasie Mikser tworze za pomocą typedefa obiekt. Czy powinienem go tworzyć czy nie muszę? Czy sortowanie jakie używam do sortowania wiersza tak ma wyglądać? No i mam problem z operatorami przeciążonymi strumienia. Pierwszy jest dobry ale nie potrafię napisać wypisywania całej kolejki list. Z góry dzięki za pomoc.

#include <iostream>
#include <list>
#include <queue>
#include <fstream>
#include <string>
#include <set>
#include <sstream>
#include <deque>
#include <vector>

using namespace std;

//Kolejnosc slow w wierszu alfabetycznie
struct mojeGreater {
	bool operator()(const string &lv, const string &rv)
	{
		for (size_t i = 0; i < lv.size(); ++i){
				if (lv[i] < rv[i])
					return true;
				else
					return false;
		}
	}
};
struct mojeGreaterr {
	bool operator()(const string &lv, const string &rv)
	{
		for (size_t i = 0; i < lv.size(); ++i) {
			if (lv[i] > rv[i])
				return true;
			else
				return false;
		}
	}
};


typedef priority_queue<list<string>> kolejkalist;
typedef list<string> lista;

//Kolejnosc  list w kolejce
struct mojeGreater2 {
	bool operator()(const lista &lv, const lista &rv)
	{
		if (lv.size() < rv.size())
		{
			return true;													
		}														//nie potrafie tego uzyc...
		else
		{
			return false;
		}
	}
};

//Przeciazony operator wypisywania wiersza do strumienia
ostream & operator <<(ostream & strumienWyjscie, lista wiersz) {
	strumienWyjscie << wiersz.size() << ": ";
	for (lista::iterator start = wiersz.begin(); start != wiersz.end(); start++)
	{
			strumienWyjscie << *start<<" ";
	}
	strumienWyjscie << endl;
	return strumienWyjscie;
}


//Przeciazony operator wypisywania kolejek listy do strumienia
ostream & operator<<(ostream &strumienWyjscie, kolejkalist kolejka) {
	while (!kolejka.empty()) {
		strumienWyjscie << kolejka.size() << ": ";
			strumienWyjscie << kolejka.top() << " ";
			kolejka.pop();

		}
	return strumienWyjscie;
}

class Mikser : public kolejkalist {
	//listaKolejek listaWlasciwa;
	kolejkalist kolejkaWlasciwa;
public:
	Mikser(){};
	Mikser(string fileNameProto){
		open(fileNameProto);
	}
	~Mikser()
	{

		while (!kolejkaWlasciwa.empty()) {
			kolejkaWlasciwa.pop();
		}
	}
	void open(string nazwaPliku) {
		//Otwarcie pliku
		ifstream plik;
		plik.open(nazwaPliku, ios::in);
		if (plik.good()) cout << "Otwarto plik." << endl;
		else {
			cout << "Nie otwarto pliku. Koniec imprezy.";
			exit(0);
		}
		//Pobieranie wierszy do kolejki 
		string wczytanyWiersz;
		while (getline(plik, wczytanyWiersz)) {
			//Pomijanie pustych linii
			if (wczytanyWiersz == "") continue;
			//Ladowanie slow do listy (wiersza)
			lista wiersz;
			stringstream wierszDoSprawdzenia;
			wierszDoSprawdzenia << wczytanyWiersz;
			string jedenWyraz;
			while (wierszDoSprawdzenia >> jedenWyraz) {
				wiersz.push_back(jedenWyraz);				//do listy	
			}
			if(wiersz.size()>=6)
				wiersz.sort(mojeGreater());
			else
				wiersz.sort(mojeGreaterr());

			//wiersz.sort(mojeGreater2());
			kolejkaWlasciwa.push(wiersz);					//do kolejki
			//cout << wiersz;
		}
		cout << kolejkaWlasciwa;
	};
};

int main()
{
	Mikser pierwszy;
	pierwszy.open("mistrz.txt");
        return 0;
}