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

Kolejka priorytetowa a struktura

Ostatnio zmodyfikowano 2011-12-29 21:04
Autor Wiadomość
kasprus
Temat założony przez niniejszego użytkownika
Kolejka priorytetowa a struktura
» 2011-12-29 19:51:44
Witam,
zacząłem używać ostatnio stl-owej kolejki priorytetowej. Nie wiem jednak, co zrobić, gdy mam np strukturę:
C/C++
struct cos {
    int a;
    int b;
};
i kolejkę priorytetową:
priority_queue < cos > kolejka;
Chcę, aby elementy na niej były possortowane według a. Jak to zrobić?
//Nie wiem, czy do końca odpowiedni temat, bo kurs stl-a jest osobny od kursu c++.
P-46636
jsc
» 2011-12-29 20:11:22
Sortować kolejkę?

Pomysł dość oryginalny, lepiej sortować vector.
P-46638
kasprus
Temat założony przez niniejszego użytkownika
» 2011-12-29 20:20:18
W zasadzie, to kolejka priorytetowa jest od razu posortowana:) Chcę mieć po prostu dostęp do najmniejszego elementu, al ciągłe sortowanie nie opłaca się. Gdy robiłem kolejkę na samych int-ach, wszystko było ok. Problem zaczyna się, gdy do koejki chce dodawać struktury...
P-46639
DejaVu
» 2011-12-29 20:20:19
Jest to kontener dedykowany do sortowania i nie jest to kolejka tylko ma w swojej nazwie wyraz kolejka. Co do pytania autora to możesz użyć albo:
C/C++
std::pair < typ_a, typ_b >

albo

jako ostatni parametr szablonu podać funktor, który będzie potrafił sortować tą strukturę

albo

przeciążyć wewnątrz struktury operatory: <, ==, !=

Jak przeciążyć operatory masz w dokumentacji: » standard C++Przeciążanie operatorów.
P-46640
kasprus
Temat założony przez niniejszego użytkownika
» 2011-12-29 20:29:05
Najbardziej odpowaiadałby mi ten drugi sposób. Tylko nie wiem, czy to ma być tak jak wtedy, kiedy używam funkci sort(), że dodaję funkcję porównującą:
 bool cmp(cos a, cos b){
            return a.a<b.a;
            }
Jeśli tak robię i piszę:
priority_queue < cos, cmp > kolejka;
To kompilator wywala błąd.
P-46641
ison
» 2011-12-29 20:34:52
C/C++
#include <queue>
#include <cstdio>

struct AAA
{
    int a;
    int b;
};

struct compare
{
    template < class T > bool operator ()( const T & A, const T & B ) const {
        return A.a < B.a;
    }
};

int main()
{
    std::priority_queue < AAA, std::vector < AAA >, compare > que;
    AAA A = { 5, 7 }, B = { 10, 66 };
    que.push( A );
    que.push( B );
    printf( "%d\n", que.top().a );
}
P-46642
jsc
» 2011-12-29 20:45:29
Jak przeciążę operatory porównania to będę mógł zastosować operację w stylu
C/C++
sort( a, a + 8, greater < int >() );
?
P-46643
ison
» 2011-12-29 20:57:14
@jsc ale mówisz teraz o kolejce priorytetowej czy o czym? w kolejce priorytetowej nie masz operatora + i nie musisz sortować bo cały czas jest posortowana :P jeśli mówisz o innych kontenerach to jak najbardziej

C/C++
sort( a, a + 8, greater < int >() );
tylko bez ( )
P-46645
« 1 » 2
  Strona 1 z 2 Następna strona