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ę: 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++. |
|
jsc |
» 2011-12-29 20:11:22 Sortować kolejkę?
Pomysł dość oryginalny, lepiej sortować vector. |
|
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... |
|
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: 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: Przeciążanie operatorów. |
|
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. |
|
ison |
» 2011-12-29 20:34:52 #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 ); }
|
|
jsc |
» 2011-12-29 20:45:29 Jak przeciążę operatory porównania to będę mógł zastosować operację w stylu sort( a, a + 8, greater < int >() );
? |
|
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 sort( a, a + 8, greater < int >() );
|
tylko bez ( ) |
|
« 1 » 2 |