Przeciążanie operatorów
Ostatnio zmodyfikowano 2017-05-22 20:51
Czachodym Temat założony przez niniejszego użytkownika |
Przeciążanie operatorów » 2017-05-22 02:56:15 Witam. Piszę program na studia, którego pewna część polega na tym, że do kolejki priorytetowej wrzucam kilka obiektów struktury Edge. Program ma posortować krawędzie grafu. Wygląda to w ten sposób: struct Edge { int vertexStart, vertexEnd, weight; bool Edge::operator ()( const Edge & edge1, const Edge & edge2 ) { if( edge1.weight > edge2.weight ) return true; if( edge1.weight < edge2.weight ) return false; return false; } };
Po odpaleniu programu i wyświetleniu krawędzi dostaję: 0 4 1 4 0 1 2 1 2 0 5 2 4 1 2 1 4 2 1 2 2 5 0 2 4 3 3 3 4 3 0 1 4 1 0 4 5 3 6 3 5 6 4 5 7 5 4 7 2 3 8 3 2 8
Gdzie cyfry oznaczają kolejno: wierzchołek z którego krawędź wychodzi, na którym się kończy i wagę tej krawędzi. Jak widać krawędzie sortują się według wag. Tutaj jest mój problem. Jak to przeciążyć tak, by wyświetlane krawędzie były posortowane po wagach, a krawędzie o tych samych wagach były także posortowane według numeru wierzchołka na którym się kończą? Wszelkie moje próby kończą się kompletnie losowym sortowaniem elementów w kolejce, proszę o pomoc. |
|
mateczek |
» 2017-05-22 10:07:44 dlaczego przeciążasz operator ()?? a nie znak mniejszości ?? dlaczgo operator będący składnikiem klasy jest dwuargumentowy?? struct Edge { int vertexStart, vertexEnd, weight; bool Edge::operator <( const Edge & edge ) { return( weight < edge.weight ); } }; |
|
karambaHZP |
» 2017-05-22 11:10:40 bool Edge::operator <( const Edge & edge ) const { return std::tie( weight, vertexEnd ) < std::tie( edge.weight, edge.vertexEnd ); }
|
|
Czachodym Temat założony przez niniejszego użytkownika |
» 2017-05-22 20:51:26 Przy przeciążaniu operatora < wyrzuca błąd: funkcja przyjmująca 2 argumentów nie jest wynikiem przetworzenia termu. Ale używając Waszego kodu do przeciążenia operatora () i minimalnej edycji go wszystko zadziałało. Dziękuję za pomoc, zamykam. |
|
« 1 » |