Tworzenie obiektu przetwarzającego dane wczytane z pliku tekstowego

0

Czesc,
mam do zrobienia do szkoly zadanie związane z STL,ale cos nie do konca chyba rozumiem. Mianowicie zdanie brzmi mniej wiecej tak
"Korzystając z kontenerów biblioteki STL utwórz typ danych – kolejkę priorytetową list, przy czym elementami list są słowa (obiekty typu string).
Zadeklaruj klasę Mikser dziedziczącą po tym typie danych, która będzie posiadała następujące składowe: konstruktor, destruktor, metody: open, write.
Napisz program który, wykorzystując obiekt klasy Mikser, przetwarza dane wczytane z pliku tekstowego mistrz.txt. W pliku znajdują się dane wejściowe: kilka wierszy tekstu, w każdym wierszu po kilka słów. Program tworzy obiekt typu Mikser, a następnie na jego rzecz wywołuje kolejno metody: open i write"
Moj szkic na te chwile:

#include <functional>
#include <queue>
#include <iostream>
#include <list>

using namespace std;


class Mikser :public priority_queue< string, list<string>, greater<string> >
{
public:
	Mikser(){ }
	~Mikser(){ }
	void open(){};
	void write(){};
	
};

int main()
{
	Mikser kolejka;
}

Tylko ze kiedy probuje dodac cos do tej kolejki np kolejka.push("pierwszy") albo kolejka.emplace("drugi") to kompilator sypie mi bledami. Z tego co czytalem to lista chyba nie moze byc kontenerem kolejki priorytetowej ze wzgledu na nieposiadanie iteratorow swobodnego dostepu ale sam juz nie wiem. Bede wdzieczny za kazda porade

0

"The type of the underlying container to use to store the elements. The container must satisfy the requirements of SequenceContainer, and its iterators must satisfy the requirements of RandomAccessIterator. Additionally, it must provide the following functions with the usual semantics"

Lista ma jedynie BidirectionalIterator, która jest niżej w hierarchii niż RandomAccessIterator.

0

Czyli nie mogę umieścić w kolejce priorytetowej żadnej listy?

0

Możesz je umieścić w vectorze, po treści zadania nie powinno to mieć znaczenia.

0

Mam jeszcze 1 pytanie
Założmy że tworze vector w ktorym jest jakas lista typu string

list<string> lista;
lista.push_back("jeden");
lista.push_back("dwa");
lista.push_back("trzy");
vector<list<string>> wektor;
wektor.push_back(lista);

i teraz kiedy próbuje wypisać zawartość wektora iteratorami

	for (vector<list<string>> ::iterator it = v1.begin(); it != v1.end(); ++it)
	{	
		cout << it->front() << endl;
	}

wypisywany jest tylko 1 element listy czyli w tym przypadku "jeden",i jak zrobić żeby wypisywane były wszystkie elementy które znajdują sie na owej liście? :/

0

Potrzebujesz dodać jeszcze jedną, wewnętrzną pętlę lecącą po liście pokazywanej iteratorem it.

0
 for (auto list_ : v1) 
 	for (auto el : list_)
 		cout << el;

spróbuj tak ;)

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