Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie stringa jako elementu listy

Ostatnio zmodyfikowano 2018-11-27 21:34
Autor Wiadomość
werter
Temat założony przez niniejszego użytkownika
Sortowanie stringa jako elementu listy
» 2018-11-27 03:45:03
Cześć,
borykam się z ostatnim problemem który został mi do napisania programu.
Mianowicie załóżmy że tworze listę przechowującą obiekty typu string.

C/C++
list < string > lista;
 i dodaje do niej nowy element reprezentujący jakiś napis
C/C++
lista.push_front( "ala lubi bartka" );
 i szukam pomocy jak:
1. Przesortować(zamienić kolejność slow) ten napis alfabetycznie czyli zamiast "ala lubi bartka" powinno być "ala bartka lubi".Czytałem o sortowaniu elementów w liście ale to było sortowanie porównujące parę elementów listy a ja muszę każdy element reprezentujący jakiś napis posortować tak jak u góry ;/
2.W jaki sposób zwrócić liczbę słów znajdujących się w owym elemencie listy? bo meteda .lenght() zwraca mi tylko sumę wszystkich znaków.
P-172991
pekfos
» 2018-11-27 09:33:12
Lista nie ma tu nic do rzeczy. Nie ma nic specjalnego w "stringu jako elemencie listy" względem "stringa po prostu". Żeby posortować napis po słowach musisz najpierw podzielić go na słowa i zapisać np w wektorze, wtedy możesz posortować słowa alfabetycznie przez std::sort() i zostanie tylko skleić ciąg słów w wynikowy napis.
P-172992
werter
Temat założony przez niniejszego użytkownika
» 2018-11-27 17:55:47
Zadziałało,dzieki :)
P-172995
werter
Temat założony przez niniejszego użytkownika
» 2018-11-27 21:23:04
Ale w sumie to mam jeszcze jeden problem ;/

Tworze kolejke priorytetowa ktora przechowuje liste stringow i pisze do niego comparator porównujący dlugosc stringa,tylko ze kiedy próbuje wstawic do tej kolejki liste to dostaje blad.

C/C++
struct comp
{
    bool operator ()( const string & lhs, const string & rhs ) const
    {
        return lhs.size() < rhs.size();
    }
};


main()
{
   
    priority_queue < string, list < string >, comp > kolejka;
    list < string > lista;
    lista.push_front( "jeden i nie ostatni" );
    lista.push_front( "drugi i nie gorszy" );
    lista.push_front( "trzeci i sprawiedliwy" );
   
    kolejka.push( lista ) // tu wyskakuje blad
nie wiem czemu ale nie moge wstawic zdj z bledem,wiec tu jest link https://ibb.co/CQcgFTS
jesli nie korzystam z comparatora czyli kolejka wyglada tak priority_queue<list<string> > to dziala..no ale muszę mieć w kolejce te listy posortowane wzgledem dlugosci ;/
P-172997
pekfos
» 2018-11-27 21:26:40
no ale muszę mieć w kolejce te listy posortowane wzgledem dlugosci ;/
Więc dlaczego próbujesz robić cokolwiek innego, niż kolejkę, która przechowuje listy?
C/C++
priority_queue < string, list < string >, comp > kolejka;
To nie jest kolejka list.
P-172998
werter
Temat założony przez niniejszego użytkownika
» 2018-11-27 21:28:40
"Korzystając z kontenerów biblioteki STL utwórz typ danych – kolejkę priorytetową list, przy czym
elementami list są słowa (obiekty typu string)."
"Listy słów zapisane w kolejce priorytetowej powinny być w niej
posortowane pod względem ich długości od najdłuższych do najkrótszych list. W tym celu
napisz obiekt funkcyjny do porównywania długości list"

bo taka jest treść zadania :<
P-172999
pekfos
» 2018-11-27 21:30:38
Kolejka list = kolejka, w której elementy to listy.
P-173000
werter
Temat założony przez niniejszego użytkownika
» 2018-11-27 21:33:00
czyli priority_queue<list<string> > tak? tylko jak użyć wlasnego komparatora,bo w dokumentacji widziaialem ze to ostatni parametr deklaracji.
P-173001
« 1 » 2
  Strona 1 z 2 Następna strona